【问题标题】:How can I configure Identity Server to correctly validate JWT tokens after an Azure App Slot Switch?如何配置 Identity Server 以在 Azure App Slot Switch 后正确验证 JWT 令牌?
【发布时间】:2022-02-15 00:16:14
【问题描述】:

我有一个核心托管 API,它使用 IdentityServer 并向我的基于桌面的客户端发出 JwtBearer 令牌。这通常可以正常工作,我可以按预期登录并使用该应用程序。

但是,在使用 Azure 部署槽时,由于颁发者验证,我遇到了问题。

在交换槽时,azure 不会交换正在运行的代码,而只是交换指向 url,以便预热运行的应用程序准备好立即处理请求。但是,Identity Server 实现似乎保留了对 OLD slot URL 的引用,并将其用作颁发者验证的一部分。

这意味着一旦交换了插槽,不仅所有客户端都有效地注销(这已经够糟糕了),而且当客户端再次登录时,身份服务器提供的令牌甚至都无效,因为它是为颁发者获取了错误的 URI。

这会导致错误:

Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler: IdentityServerJwtBearer 未通过身份验证。失败信息: IDX10205:颁发者验证失败。发行人: 'https://my-app-name.azurewebsites.net'。不匹配: 验证参数.ValidIssuer: 'https://my-app-name-deployment.azurewebsites.net' 或 validationParameters.ValidIssuers: 'null'。

我已尝试通过在设置中执行此操作来禁用颁发者验证:

     services.AddAuthentication(options =>
        {
        })
        .AddCookie()
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters.ValidateIssuer = false;
        })
        .AddIdentityServerJwt();

但是这似乎没有任何区别。我是否将此变量设置在错误的位置?是否还需要配置其他设置才能绕过此检查?

我还尝试将 ValidIssuers 列表设置为在希望任何一个都被接受并允许令牌被任一插槽验证,但这似乎没有任何区别。

或者,有没有办法阻止 IdentityServer 缓存颁发者网址 - 或者有办法在不重新启动应用程序的情况下刷新该缓存?目前,一旦交换插槽,我可以让桌面应用程序访问 API 的唯一方法是重新启动 API 应用程序,然后再次登录(只是注销并登录仍然会导致服务器无法验证的令牌,即使虽然服务器刚刚发出它)。

我觉得我一定错过了一些明显的东西,但我看不出它是什么......

【问题讨论】:

    标签: azure-web-app-service identityserver4


    【解决方案1】:

    要配置 IdentityServer JWT Bearer,您可以使用配置调用:

        services.Configure<JwtBearerOptions>(IdentityServerJwtConstants.IdentityServerJwtBearerScheme,
            options =>
            {
                options.TokenValidationParameters.ValidateIssuer = false;
            });
    

    这样,ValidateIssuer 标志被设置在 IdentityServerJwt 上,而不是原来的代码设置了一个新的 JwtBearer,它与 IdentityServer 完全分开。

    在正确的服务上设置配置后,还可以使用 ValidIssuers 数组来包含应接受的 Asure Slot Urls。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 2020-07-08
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 2021-11-16
      相关资源
      最近更新 更多