ClaimActions.Remove与ClaimActions.DeleteClaim的区别 [英] Difference between ClaimActions.Remove and ClaimActions.DeleteClaim
本文介绍了ClaimActions.Remove与ClaimActions.DeleteClaim的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试学习OAuth2和IdentityServer4。
我想知道ClaimActions.Remove
和ClaimActions.DeleteClaim
在Microsoft.AspNetCore.Authentication.OAuth.Claims中的区别
我正在尝试按照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中删除这些声明
我想知道这两种方法的区别和用例。你能帮我解释一下吗?
推荐答案
索赔操作允许修改来自外部提供程序的索赔如何映射(或不映射)到您的Claims主体中的索赔。这不会影响您的JWT令牌声明。
让我们从默认的ASP.NET Core 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中间件将忽略一些不会映射到用户声明的声明,请参阅source code:
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
将映射到用户Claspincipal。
如果使用ClaimActions.DeleteClaim("sid");
,则意味着sid
不会映射到用户声明。
因此,如果使用您的测试选项,结果将为:
这篇关于ClaimActions.Remove与ClaimActions.DeleteClaim的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文