问题描述
我们已经在B2C租户中注册了应用程序,当用户使用MS Graph SDK登录应用程序后,我们正在尝试读取其信息。
C#
var me = await graphClient.Me.Request().GetAsync();
权限
https://graph.microsoft.com/User.Read
我们可以使用login.microsoftonline.com从OAuth 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操作。