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 验证 原因的示例。
我有一个可用的 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 验证