【问题标题】:Customize At_hash Validation in .NET Authorization framework在 .NET 授权框架中自定义 At_hash 验证
【发布时间】:2021-11-19 18:23:20
【问题描述】:

我正在使用 .Net Core 3.1 授权框架来制作 Openid 流,并将我的授权重定向到第三方提供商,这是我的配置:

services.AddAuthorization(cfg =>
                {
                    cfg.AddPolicy("MyPolicy", cfgPolicy =>
                    {
                        cfgPolicy.AddRequirements().RequireAuthenticatedUser();
                        cfgPolicy.AddAuthenticationSchemes(OpenIdConnectDefaults.AuthenticationScheme);
                    });
                }).AddAuthentication(cfg =>
                {
                    cfg.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    cfg.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
                })
                .AddCookie()
                .AddOpenIdConnect(cfg =>
                {
                    cfg.ClientId = authenticationConfig.ClientId;
                    cfg.ClientSecret = authenticationConfig.ClientSecret;
                    cfg.ResponseType = "code";
                    cfg.CallbackPath = "/login/callback";
                    cfg.GetClaimsFromUserInfoEndpoint = true;
                    cfg.Scope.Clear();
                    cfg.Scope.Add("openid");
                    cfg.Configuration = new OpenIdConnectConfiguration
                    {
                        AuthorizationEndpoint = authenticationConfig.UrlSts + "authorize",
                        TokenEndpoint = "https://interal.io/api/oauth/token",
                        UserInfoEndpoint = "https://interal.io/api/oauth/token_info"
                    };
                });

但我在类 OpenIdConnectProtocolValidator 中的 ValidationHash 步骤中遇到错误。我的 at_hash 声明以不同的方式生成,不等于此处指定:https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation

如何在 OpenIdConnectProtocolValidator 类中自定义 ValidateHash 方法??

【问题讨论】:

    标签: asp.net-core openid-connect openid asp.net-authorization


    【解决方案1】:

    可以用您自己的实现覆盖OpenIdConnectProtocolValidator

    public class CustomOpenIdConnectProtocolValidator : OpenIdConnectProtocolValidator
    {
        protected override void ValidateAtHash(OpenIdConnectProtocolValidationContext validationContext)
        {
            // Custom validation.
        }
    }
    

    Startup.cs 可以自定义协议验证器:

    .AddOpenIdConnect(cfg =>
    {
        cfg.ProtocolValidator = new CustomOpenIdConnectProtocolValidator();
    });
    

    但要小心; at_hash 值应该是 access_token 值的 ASCII 表示的八位字节哈希的最左半部分的 base64url 编码,其中使用的哈希算法是 ID 令牌的 alg Header 参数中使用的哈希算法何塞标题。

    规范就是规范是有原因的。您应该有充分的理由偏离规范。

    【讨论】:

    • 是的,我知道更改 ValidateAtHash 方法不是一个好习惯,但不满意我的公司 at_hash 声明是以不同的方式生成的,所以我需要这样做。
    • 好的,您是否通过以自定义方式验证 at_hash 来解决此问题?
    • 好的,感谢您的帮助
    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    相关资源
    最近更新 更多