使用Azure AD B2C的多路访问令牌

安东尼·福特

我们有一个Web应用程序,需要对多个Web API进行身份验证访问。我们正在使用Azure AD B2C进行身份验证,除了一个非常令人沮丧且非常局限的问题,我们可以正常工作:我们一次只能获取一个有效的访问令牌,但我们需要几个。

下面的代码段显示了关注的领域。

private async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedNotification notification)
{
    await GetAccessToken(notification, TaskScopes);
    await GetAccessToken(notification, UserScopes);
}

private async Task<AuthenticationResult> GetAccessToken(AuthorizationCodeReceivedNotification notification, string[] scopes)
{
    string signedInUserID = notification.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
    TokenCache userTokenCache = new MSALSessionCache(signedInUserID, notification.OwinContext.Environment["System.Web.HttpContextBase"] as HttpContextBase).GetMsalCacheInstance();
    ConfidentialClientApplication cca = new ConfidentialClientApplication(ClientId, Authority, RedirectUri, new ClientCredential(ClientSecret), userTokenCache, null);
    try
    {
        return await cca.AcquireTokenByAuthorizationCodeAsync(notification.Code, scopes);
    }
    catch (Exception ex)
    {
        //TODO: Handle
        throw;
    }
}

从Azure AD B2C收到身份验证令牌将调用显示的代码段如图所示执行此代码时,将返回两个访问令牌中的第一个,并且完全有效。但是,第二个具有第一个令牌access_token: null的作用域

此外,如果我们简单地注释掉对的两个调用中的任何一个,则GetAccessToken无论它是两个中的哪个,其余调用都能按预期工作。这似乎表明我们所有的配置都是正确的,因此我不会在此处发布这些配置进行审查。

我见过的所有示例代码都只显示了一个访问令牌。同样,当我们隔离两个呼叫中的任何一个时,它都可以完美地工作。仅当我们尝试同时获取两个令牌时,无论顺序如何,它总是在两个令牌中的第二个令牌上失败。此外,发生这种情况时,我们也不会遇到任何异常。

谁能提供任何有关这里发生情况的线索?谢谢你的帮助。

迈克·申克

根本的问题是,按照OAuth标准,您不应多次尝试使用相同的授权代码。

来自https://tools.ietf.org/html/rfc6749#section-10.5

授权码必须是短期的且只能使用一次。如果授权服务器观察到多次尝试为访问令牌交换授权代码,则授权服务器应尝试基于功能受限的授权代码撤回已授予的所有访问令牌。

因此,Azure AD B2C目前无法支持您的用例,因为您无法在单个访问令牌中请求多个访问者和范围。

如果您可以控制这几个API,并且可以使它们共享一个受众,但可能具有各自的作用域,则可以对它们全部使用一个访问令牌。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Azure AD B2C门户中使用loginRedirect生成访问令牌

受Azure AD B2C保护的Azure Function App的Postman中的请求访问令牌

在Postman中为Azure AD B2C请求访问令牌

在与Azure AD B2C集成的网站中获取访问令牌

配置邮递员以测试从Azure AD B2C获取新的访问令牌

Azure AD B2C :: 访问令牌中缺少角色声明

Azure AD B2C令牌发行

Azure AD B2C不返回刷新令牌

您可以使用Azure AD作为身份提供者从Azure AD B2C登录中获取MSGraph访问令牌吗?

使用 AD Graph API 从 Azure AD B2C 管理用户 - 安全访问

Azure AD和Azure AD B2C令牌之间的区别

如何使用PHP验证Azure ad b2c令牌?

如何在Azure AD B2C中获取访问令牌而不是指向重定向URL

如何使用Azure AD B2C保护Blazor Wasm应用访问的Azure功能?

Azure AD B2C刷新令牌/ ID令牌iOS Swift 4

使用OAuth 2.0从Azure B2C AD访问用户数据

Azure AD B2C和Azure AD Connect

Azure AD B2C使用PHP验证JWT

使用 Azure AD B2C 的 SMS 功能

Azure AD与Azure AD B2C与Azure AD B2B

在Azure AD B2C中使用Azure AD Graph API创建用户

根据任何自定义策略在Azure AD B2C中兑换刷新令牌

Azure AD B2C刷新令牌已撤销403

无法针对 Microsoft Graph API 颁发的令牌验证 Azure AD B2C 的签名

在Azure AD B2C中请求令牌时缺少范围“ scp”

Azure AD B2C 令牌返回名称,但 User.Identity.Name 为空

我的Azure AD B2C令牌的密钥在哪里?

尝试从 Azure AD B2C 获取令牌时出错

Azure AD B2C以编程方式获取令牌以进行单元测试