authentication - Azure ADB2C 多 Web API 身份验证
问题描述
我的场景与配置 ADB2C 的同一个 MVC Web 应用程序中的两个或多个 Web API 的身份验证有关。
我在 Azure ADB2C 中创建了两个 Web api,并将这两个 Web api 的权限授予 ADB2C MVC Web 应用程序。但是,每当我尝试获取访问令牌时,它都会为我提供一个 Web api 的访问令牌,但不提供第二个 Web api 的访问令牌。
我想知道这种情况在 ADB2C 中是否可行?
谢谢。
解决方案
一个访问令牌可用于一个资源(web api)访问。如果您想要另一个资源的访问令牌,您可以使用刷新令牌(如果存在)来获取新令牌:
如果使用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 将自动使用它来获取新的访问令牌并透明地返回它。
您可以单击此处获取代码示例。
推荐阅读
- jmeter - 独立打开 JMeter jtl 文件
- python-3.x - 在现有 conda 环境中升级 python 版本
- haskell - 定义尺寸常数时如何允许算术运算?
- c# - 实体框架 - 查询以获取列的最后 2 个唯一条目,然后获取它们的相关数据
- neo4j - 为什么使用标签时零长度路径找不到匹配项?
- android - 如何在 API 29 或 Android Q 中使用 DownloadManager 下载文件?
- azure-devops - 可以通过 TestCategory 过滤 azure-devops 管道中的测试结果吗?
- go - Golang rsa-oaep 解密失败,前端使用 webcrypto
- r - 创建 3-way 表:tabyl 输出排序
- java - 在 REST 服务中返回多个响应范围