Asp.net core 索赔之间的差异。删除和索赔。删除索赔
我正在尝试学习OAuth2和IdentityServer4 我想知道Microsoft.AspNetCore.Authentication.OAuth.Claims中Asp.net core 索赔之间的差异。删除和索赔。删除索赔,asp.net-core,oauth,identityserver4,claims,Asp.net Core,Oauth,Identityserver4,Claims,我正在尝试学习OAuth2和IdentityServer4 我想知道Microsoft.AspNetCore.Authentication.OAuth.Claims中索赔。删除和索赔。删除索赔之间的区别 我正在尝试学习一些有关的教程和文档 在我的代码中,我做了如下测试: options.ClaimActions.Remove("amr"); options.ClaimActions.DeleteClaim("sid"); options.ClaimActions.DeleteClaim("id
索赔。删除和索赔。删除索赔
之间的区别
我正在尝试学习一些有关的教程和文档
在我的代码中,我做了如下测试:
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核心OIDC中间件开始:
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 Middware将忽略一些不会映射到用户声明的声明,请参阅:
所以,即使Jwt令牌也包含上述声明,在身份验证之后,用户声明将不包含上述声明,因为在映射时它们会被忽略
如果使用选项。索赔。删除(“amr”)
,这意味着amr
将映射到用户索赔
如果使用索赔。删除索赔(“sid”)
,这意味着sid
将不会映射到用户声明
因此,如果使用您的测试选项,结果将是:
索赔操作允许修改来自外部提供商的索赔如何映射(或不映射)到您的ClaimsPrincipal中的索赔。这不会影响您的jwt令牌声明
让我们从默认的ASP.NET核心OIDC中间件开始:
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 Middware将忽略一些不会映射到用户声明的声明,请参阅:
所以,即使Jwt令牌也包含上述声明,在身份验证之后,用户声明将不包含上述声明,因为在映射时它们会被忽略
如果使用选项。索赔。删除(“amr”)
,这意味着amr
将映射到用户索赔
如果使用索赔。删除索赔(“sid”)
,这意味着sid
将不会映射到用户声明
因此,如果使用您的测试选项,结果将是:
因此,为了确认。。。这两个函数与JwtToken无关。它仅在Controller.User.Claims上下文中操纵UserClaims。我很清楚你的要求。我仍然混淆了
Remove(“amr”)
。移除意味着从哪里移除?从被忽略的列表中?谢谢。是的,该功能用于在客户端应用程序中从identity server获取令牌后映射索赔,从索赔集合中删除,您可以认为从忽略的列表中,为了确认。。。这两个函数与JwtToken无关。它仅在Controller.User.Claims上下文中操纵UserClaims。我很清楚你的要求。我仍然混淆了Remove(“amr”)
。移除意味着从哪里移除?从被忽略的列表中?谢谢。是的,该功能用于在客户端应用程序中从identity server获取令牌后映射索赔,从索赔集合中删除,您可以从忽略列表中考虑