Proof Key for Code Exchange (PKCE)
时间:2022-09-23
PKCE机制最初旨在保护移动应用程序不被安装在同一设备上的恶意应用程序劫持其回调 URI,现已扩展到机密客户端以帮助减少授权代码泄漏。所有版本的 OpenIddict 都完全支持此机制,并且可以在全局或每个客户端强制执行以阻止不发送 PKCE 参数的授权请求。
在全球层面启用 PKCE 实施
options.RequireProofKeyForCodeExchange()
可以通过调用服务器选项在全球范围内强制执行代码交换的证明密钥:
services.AddOpenIddict()
.AddServer(options =>
{
options.RequireProofKeyForCodeExchange();
});
为每个客户端启用 PKCE 强制执行
代码交换的证明密钥也可以通过将其添加到附加到客户端的要求列表中来为每个客户端强制执行:
await manager.CreateAsync(new OpenIddictApplicationDescriptor
{
ClientId = "mvc",
ClientSecret = "901564A5-E7FE-42CB-B10D-61EF6A8F3654",
ConsentType = ConsentTypes.Explicit,
PostLogoutRedirectUris =
{
new Uri("https://localhost:44381/signout-callback-oidc")
},
RedirectUris =
{
new Uri("https://localhost:44381/signin-oidc")
},
Permissions =
{
Permissions.Endpoints.Authorization,
Permissions.Endpoints.Logout,
Permissions.Endpoints.Token,
Permissions.GrantTypes.AuthorizationCode,
Permissions.GrantTypes.RefreshToken,
Permissions.ResponseTypes.Code,
Permissions.Scopes.Email,
Permissions.Scopes.Profile,
Permissions.Scopes.Roles,
Permissions.Prefixes.Scope "demo_api"
},
Requirements =
{
Requirements.Features.ProofKeyForCodeExchange
}
});
启用code_challenge_method=plain
支持
默认情况下,OpenIddict 仅支持code_challenge_method=S256
,这是最安全的代码质询方式,也是 PKCE 规范唯一要求的一种方式。code_challenge_method=plain
虽然不推荐,但可以通过将其添加到来手动启用对该方法的支持OpenIddictServerOptions.CodeChallengeMethods
:
services.AddOpenIddict()
.AddServer(options =>
{
options.Configure(options => options.CodeChallengeMethods.Add(CodeChallengeMethods.Plain));
});
特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。