ClaimActions.Remove与ClaimActions.DeleteClaim的区别 [英] Difference between ClaimActions.Remove and ClaimActions.DeleteClaim

查看:0
本文介绍了ClaimActions.Remove与ClaimActions.DeleteClaim的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试学习OAuth2和IdentityServer4。

我想知道ClaimActions.RemoveClaimActions.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆