首页 > 解决方案 > Azure ADB2C 多 Web API 身份验证

问题描述

我的场景与配置 ADB2C 的同一个 MVC Web 应用程序中的两个或多个 Web API 的身份验证有关。

我在 Azure ADB2C 中创建了两个 Web api,并将这两个 Web api 的权限授予 ADB2C MVC Web 应用程序。但是,每当我尝试获取访问令牌时,它都会为我提供一个 Web api 的访问令牌,但不提供第二个 Web api 的访问令牌。

我想知道这种情况在 ADB2C 中是否可行?

谢谢。

标签: authenticationasp.net-core.net-coreazure-ad-b2c

解决方案


一个访问令牌可用于一个资源(web api)访问。如果您想要另一个资源的访问令牌,您可以使用刷新令牌(如果存在)来获取新令牌:

https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow#refresh-the-access-token

如果使用MSAL.NET,在初始令牌获取后,您可以调用AcquireTokenSilent,询问您需要的 api 范围:

// Retrieve the token with the specified scopes
var scope = AzureAdB2COptions.ApiScopes.Split(' ');
string signedInUserID = HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;

IConfidentialClientApplication cca =
ConfidentialClientApplicationBuilder.Create(AzureAdB2COptions.ClientId)
    .WithRedirectUri(AzureAdB2COptions.RedirectUri)
    .WithClientSecret(AzureAdB2COptions.ClientSecret)
    .WithB2CAuthority(AzureAdB2COptions.Authority)
    .Build();
new MSALStaticCache(signedInUserID, this.HttpContext).EnablePersistence(cca.UserTokenCache);

var accounts = await cca.GetAccountsAsync();
AuthenticationResult result = await cca.AcquireTokenSilent(scope, accounts.FirstOrDefault())
    .ExecuteAsync(); 

MSAL 将查找缓存并返回与要求匹配的任何缓存令牌。如果此类访问令牌已过期或不存在合适的访问令牌,但存在关联的刷新令牌,MSAL 将自动使用它来获取新的访问令牌并透明地返回它。

您可以单击此处获取代码示例。


推荐阅读