Azure AD B2C 令牌问题

Azure AD B2C Token Issue

作为一家企业,我们想使用 Azure AD B2C,我们有内部用户和外部用户。

Azure AD 帮助我们管理我们的 Azure 用户、企业用户,我们甚至可以使用 x@ 添加用户。onmicrosoft.com 电子邮件。

当我们想为我们的消费者使用 Azure AD B2C 时。因此,我们有 2 个选择来添加我们的用户,即 本地用户 外部用户 (Facebook、Google 等)

如果本地用户属于我们公司,则可以使用 Azure AD B2C 门户创建用户。

但是当我们尝试创建拥有另一种电子邮件的 Azure AD B2C 用户时,我们需要使用我们自己的应用程序来使用图表 API。 (这是 Azure 门户限制

问题是我们很难在登录后获取用户值,因为他们是使用 Gmail 或 x 电子邮件的本地用户。

我们正在使用 MSAL 而不是 ADAL 来获取相关信息。

我们启用了 scopes 并且还启用了 API 访问,但这是我们遇到的错误。

错误 1:

正在获取弹出窗口: AADB2C90055: 请求中提供的范围 'openid email openid profile' 必须指定资源,例如“https://example.com/calendar.read”。

关联 ID:86d6ff41-1cef-4ba1-9b26-2aa281c92ccd

时间戳:2017-09-15 10:22:20Z

错误 2:

invalid_request登录时出错: AADB2C90117:不支持请求中提供的范围 'user_impersonation'。

关联 ID:785c6487-cd7f-4750-a769-deb477cb4ba4

时间戳:2017-09-15 10:32:39Z

:invalid_request

错误 3:

获取弹出窗口时出错: AADB2C90055:请求中提供的范围 'email openid profile' 必须指定资源,例如“https://example.com/calendar.read”。

关联 ID:bd714482-8534-473e-94bc-0a4c56da686d

时间戳:2017-09-15 10:36:15Z

:invalid_request

错误 1 ​​和错误 3

当我们使用 MSAL 库与 Azure AD B2C 交互时,无需提供范围 openid profile offline_access。 SDK 会自动添加作用域。我们只需要提供我们为 web API app 在 Azure AD B2C blade.

上注册定义的自定义范围

错误2

作用域user_impersonation是应用默认定义的自定义作用域。我们应该在它之前包含应用程序 ID URI(https://{myB2CTenant}.onmicrosoft.com/b2capp2),如下所示:

string[] SCOPES = { "https://{myB2CTenant}.onmicrosoft.com/b2capp2/note_read", "https://{myB2CTenant}.onmicrosoft.com/b2capp2/user_impersonation" };

据我所知,Azure AD B2C 目前不支持委托用户访问 Azure 广告图表。我们需要通过 Azure Active Directory->App registrations(不在 Azure AD B2C blade)注册一个应用程序,并通过客户端凭证流访问 Microsoft 或 Azure AD Graph。这是一个有用的 link 在 Azure AD B2C 中调用图 API:

Azure AD B2C: Use the Graph API

如果您希望 Azure AD B2C 应用程序也支持委派用户调用 Microsoft Graph,您可以提交来自 here 的反馈。

对我而言,该错误意味着我在没有有效 idToken 的情况下尝试获取 access_Token。

所以在调用 acquireTokenSilent() 之前确保你有一个有效的 idToken。