ServiceStack API 带有 Azure AD B2C returns 401 的 aspnet 核心请求,即使有持有者令牌

ServiceStack API aspnet core with Azure AD B2C returns 401 for request even with bearer token

我有一个可用的 ServiceStack API 可以针对 AzureAD 租户进行身份验证。我们正试图将其转移到开始使用 Azure B2C。该应用程序是用 c# 构建的,在 net 5.0 上运行。我已经设法更改配置以使用 'correct' 配置。然后我使用 Postman 从我的租户那里获取我的访问令牌,起诉授权代码流。

但是,当我向 api 发出请求时,响应始终是 401 状态代码。

我可以在servicestack代码的什么地方设置一个断点来查看为什么会发生这种故障?我在我们的 AppHostConfigurator.cs/AppHost.cs 文件中尝试了多个位置,但断点似乎没有显示为什么将 401 作为响应发回。我确定这与预期的错误 claims/roles 等有关,也许 Azure ADB2C 应用程序设置不正确,但显然我需要确切地知道以便我可以解决。

我正在这样设置身份验证:

    private static void ConfigureAuthentication(IAppHost host)
    {
        var authProviders = new List<IAuthProvider> {new NetCoreIdentityAuthProvider(host.AppSettings)};

        if (host.AppSettings.GetAllKeys().Contains("AzureAdB2C"))
        {
            var debugMode = host.AppSettings.Get(nameof(HostConfig.DebugMode), false);
            var azureSettings = host.AppSettings.Get<AzureAdB2COptions>("AzureAdB2C");
            var jwt = azureSettings.GetB2CJWTProviderReader(debugMode);

            jwt.PopulateSessionFilter = (session, payload, request) =>
            {
                if (session.Email == null && payload.ContainsKey("upn") && payload["upn"].Contains("@"))
                    session.Email = payload["upn"];
                if (session.UserName == null && payload.ContainsKey("unique_name"))
                    session.UserName = payload["unique_name"];
            };

            authProviders.Add(jwt);
        }

        var auth = new AuthFeature(() => new AuthUserSession(), authProviders.ToArray())
        {
            HtmlRedirect = "/account/signin",
            HtmlLogoutRedirect = "/account/signout",
            IncludeAssignRoleServices = false,
            IncludeRegistrationService = false
        };

        // remove default service authentication services
        auth.ServiceRoutes.Remove(typeof(AuthenticateService));

        host.Plugins.Add(auth);
    }

我们也使用 swagger 来调用 API(按预期工作)。这个问题更多的是关于使用不记名令牌提交的请求。

谢谢

请参阅此现有答案,了解如何使用 ServiceStack 的 JWT Auth Provider 验证 原因的示例。