
[英]SPA + WebAPI authenticate using Azure AD B2C and Azure AD
[英]azure ad b2c with spa and webapi
当 SPA 与后端 API 交谈时,我对 Azure B2C 的工作方式感到困惑。 我们有一个 VUE 应用程序,可以从 ASPNet 核心 Web API 检索数据。 我将 VUE 与 Azure B2C 上的 APP 连接,我可以登录并检索访问令牌,但是。
SPA 和 API 之间的身份验证/授权如何工作?
TIA
Azure B2C 使用 OATH 2 / OpenID Connect 作为保护单页应用程序和 API 的主要方式。 OATH 2 使用Json Web 令牌(无状态加密签名令牌)在多个服务之间提供身份验证(OpenID Connect 是 OATH 2 的扩展)。
客户端应用程序(在本例中为 SPA)会向 Azure AD B2C 请求 JWT 令牌。 如果用户登录到 B2C,那么安全令牌服务将发布令牌供 SPA 使用。
当 SPA 调用 API 时,来自安全令牌服务(在 OpenID Connect 流中)的 ID 令牌将被发送到Authorization
标头中的 API ( Authorization: Bearer $token$
)。 然后,API 可以根据 JWT 的签名块验证令牌,以验证令牌是由安全令牌服务颁发的并且未被修改。 由于 STS 和 API 之间存在信任关系(API 信任 STS),因此 API 会根据呈现的 JWT 对各种 api 调用进行身份验证和授权。
由于您已经让 SPA 工作并获取令牌,因此您接下来需要做的就是设置 Web API 以接受来自 B2C 的 JWT。 使用Microsoft.AspNetCore.Authentication.JwtBearer下面的代码应该可以帮助您启动并运行
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(jwtOptions =>
{
jwtOptions.Authority = $"https://login.microsoftonline.com/tfp/{Configuration["AzureAdB2C:Tenant"]}/{Configuration["AzureAdB2C:Policy"]}/v2.0/";
jwtOptions.Audience = Configuration["AzureAdB2C:ClientId"];
jwtOptions.Events = new JwtBearerEvents
{
OnAuthenticationFailed = AuthenticationFailed
};
});
(以上代码来自azure samples ,不再维护。
虽然理想情况下 SPA 和 API 都将作为单独的客户端注册到 STS,但您可以使用相同的客户端 ID,因此您不需要保留两组令牌,一组用于 SPA 客户端,一组用于 API。 在我正在处理的当前项目中,多个 SPA 被注册为客户端,然后 API 有一个AddJwtBearer
接受多个受众
.AddJwtBearer(options =>
{
options.Authority = $"https://login.microsoftonline.com/tfp/{Configuration["AzureAdB2C:Tenant"]}/{Configuration["AzureAdB2C:Policy"]}/v2.0/";
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer = true,
ValidAudiences = new List<string>
{
Configuration["AzureAdB2C:ClientId1"];,
Configuration["AzureAdB2C:ClientId2"];
}
};
}
这为我的应用程序提供了足够的安全性,并且 API 不需要向 IDP 注册为客户端。
我希望您了解 Web 应用程序/SPA 注册过程,例如
以同样的方式,我们将创建一个 Web API
webapi1
。然后我们需要配置范围。 这些范围提供了一种管理对受保护资源的访问的方法。 Web API 使用范围来实现基于范围的访问控制。 请仔细阅读有关如何为 Web API 提供范围的文档。
并且需要在我们最初创建的Web APP中为Web API授予权限。 此权限有助于在 Web APP 上生成的访问令牌在 Web API 上进行验证/自动化。 请按照文档中提到的步骤进行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.