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。
作为一家企业,我们想使用 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。