从B2C端点收到用于访问MS Graph的授权码后,未收到访问令牌

问题描述

我们已经在B2C租户中注册了应用程序,当用户使用MS Graph SDK登录应用程序后,我们正在尝试读取其信息。

C#

var me = await graphClient.Me.Request().GetAsync();

权限

https://graph.microsoft.com/User.Read

我们可以使用login.microsoftonline.comOAuth 2.0 authorization code flow获取访问令牌,但不能在.b2clogin.com 中获取。

下面是代码段

public async Task<AuthenticationResult> GetUserAccessTokenByAuthorizationCode(string authorizationCode)
    {
        AuthenticationResult aa;
        
        aa = await _app.AcquireTokenByAuthorizationCode(_scopes,authorizationCode).ExecuteAsync();
                  
        return aa;
    }

以下是我们从B2C授权端点获取带有授权代码的访问令牌的结果。

Screenshot where access token is NULL

我找到了这个post (我只引用了帖子中的以下一些评论)

这里很混乱。您绝对可以做自己想做的事, 除了这是所有Azure AD功能,而不是Azure AD B2C。所以 您不希望调用任何B2C用户流程等。B2C身份验证无法 可以访问Microsoft API,只有您自己的API。

AAD租户-仅包含AAD端点。它是单个令牌发行者。

B2C租户-包含AAD和B2C令牌端点。那里有两个 代币发行人

您不能使用tenantName.b2clogin.com获取MS Graph的令牌 API ,基于上述规则集。这表示用户B2C 身份验证不能用于授权受AAD保护的应用,或者 Microsoft API。

基于以上评论,我们确实不能从B2C应用程序访问MS Graph,但是仅当应用程序在AAD中注册时才可以访问吗?

我想知道,因为login.microsoftonline.com已被弃用,微软建议改为使用b2clogin。

请分享您的想法。谢谢。

解决方法

据我所知,您不能使用 Microsoft Graph API 来管理Azure AD B2C目录中的用户。对于B2C用户,通常使用 Azure AD Graph API 进行CRUD操作。

请参阅:herehere

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...