Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication Azure ADB2C多Web API身份验证_Authentication_Asp.net Core_.net Core_Azure Ad B2c - Fatal编程技术网

Authentication Azure ADB2C多Web API身份验证

Authentication Azure ADB2C多Web API身份验证,authentication,asp.net-core,.net-core,azure-ad-b2c,Authentication,Asp.net Core,.net Core,Azure Ad B2c,我的场景与来自配置ADB2C的同一MVC web应用程序的两个或多个web API的身份验证有关 我在Azure ADB2C中创建了两个web API,并将这两个web API的权限授予ADB2C MVC web app。但是,每当我尝试获取访问令牌时,它都会为一个web api提供访问令牌,而不会为第二个api提供访问令牌 我想知道这种情况在ADB2C中是否可行 谢谢。一个访问令牌可以被一个资源(web api)访问。如果需要其他资源的访问令牌,可以使用刷新令牌(如果存在)获取新令牌: 如果

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

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

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


谢谢。

一个访问令牌可以被一个资源(web api)访问。如果需要其他资源的访问令牌,可以使用刷新令牌(如果存在)获取新令牌:

如果使用,在初始令牌获取之后,您可以调用
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将自动使用该令牌获取新的访问令牌并透明地返回


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

嗨,楠,我完全按照您在这里的建议进行了尝试。但当我试图通过传递另一个web api的作用域来获取令牌时,它并没有给我访问令牌。它为空。您是否成功获取第一个资源的访问令牌+刷新令牌。是。我成功地获得了第一个web api的访问令牌和刷新令牌。如果交换作用域,您仍然可以获得一个访问令牌吗?您一次只能请求一个资源。您的回答表明,您正在一个请求中尝试将两个作用域都分配给不同的资源,这是行不通的。