带有Azure AD B2C的ServiceStack API aspnet核心返回401用于请求,即使带有承载令牌



我有一个正在工作的ServiceStack API,它可以针对AzureAD租户进行身份验证。我们正在尝试将其移动到开始使用Azure B2C。该应用程序是用c#构建的,运行在Net5.0上。我已经设法更改了配置以使用"正确"的配置。然后,我使用Postman从起诉授权代码流的租户那里获得我的访问令牌。

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

在servicestack代码中,我可以在哪里放置一个断点来查看为什么会发生这种故障?我在我们的AppHostConfigurator.cs/AppHost.cs文件中尝试了多个位置,但断点似乎没有显示401被作为响应发送回的原因。我确信这与预期的错误声明/角色等有关,也许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验证第三方JWT令牌无效的示例,请参阅此现有答案。

最新更新