asp.net-core - ClaimActions.Remove 和 ClaimActions.DeleteClaim 之间的区别
问题描述
我正在尝试学习 OAuth2 和 IdentityServer4。
我想知道Microsoft.AspNetCore.Authentication.OAuth.ClaimsClaimActions.Remove
之间的区别ClaimActions.DeleteClaim
我正在尝试关注Microsoft的一些教程和文档
在我的代码中,我做了这样的测试:
options.ClaimActions.Remove("amr");
options.ClaimActions.DeleteClaim("sid");
options.ClaimActions.DeleteClaim("idp");
但是,当我解密 JwtToken 时,我仍然可以看到所有三个。
我的 JwtToken 示例:
{
"nbf": 1568057488,
"exp": 1568061088,
"iss": "https://localhost:44378",
"aud": "https://localhost:44378/resources",
"client_id": "oauthtestwebclient",
"sub": "78452916-D260-4219-927C-954F4E987E70",
"auth_time": 1568057485,
"idp": "local",
"scope": [
"openid",
"profile",
"address"
],
"amr": [
"pwd"
]
}
所以,我不明白为什么它没有从生成的 JwtToken 中删除这些声明
我想知道这两种方法的区别和用例。你能帮我解释一下吗?
解决方案
声明操作允许修改来自外部提供者的声明如何映射(或不映射)到您的 ClaimsPrincipal 中的声明。这不会影响您的 jwt 令牌声明。
让我们从默认的 ASP.NET Core OIDC middeware 开始:
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
});
默认情况下,ASP.NET Core OIDC middeware 将忽略一些不会映射到用户声明的声明,请参阅源代码:
ClaimActions.DeleteClaim("nonce");
ClaimActions.DeleteClaim("aud");
ClaimActions.DeleteClaim("azp");
ClaimActions.DeleteClaim("acr");
ClaimActions.DeleteClaim("iss");
ClaimActions.DeleteClaim("iat");
ClaimActions.DeleteClaim("nbf");
ClaimActions.DeleteClaim("exp");
ClaimActions.DeleteClaim("at_hash");
ClaimActions.DeleteClaim("c_hash");
ClaimActions.DeleteClaim("ipaddr");
ClaimActions.DeleteClaim("platf");
ClaimActions.DeleteClaim("ver");
因此,即使 Jwt 令牌包含上述声明,在身份验证后,用户声明也不会包含上述声明,因为它们在映射时被忽略。
如果使用options.ClaimActions.Remove("amr");
,这意味着amr
将映射到用户声明主体。
如果使用ClaimActions.DeleteClaim("sid");
,则意味着sid
不会映射到用户声明。
因此,如果使用您的测试选项,结果将是:
推荐阅读
- c++ - 如何在 C++ 中的数组中存储一个 char 数组
- masking - Google Earth Engine Sentinel-2 Level2 设置为 NaN 云
- amazon-web-services - 如何使用 Aws Cli 的 EC2 实例角色
- arrays - 无法在循环中将数组的值设置为 0 - JS
- java - 为什么 arr[6] 在此代码中返回空值?
- javascript - 在 a-frame AR.js 中禁用屏幕上的拖动
- multidimensional-array - 读取二维表时出错
- javascript - 无法使用 JavaScript 中的 for 循环将堆栈的所有元素推入另一个堆栈
- typescript - React Hotkeys 键盘映射在打字稿中给出类型错误
- r - geom_line() 参数方向不起作用