【发布时间】:2019-03-28 01:14:32
【问题描述】:
我们希望使用 OAuth 2.0 对我们的 Web 应用程序的用户进行身份验证 通过 Azure B2C AD。管理 B2C AD 的用户将来自不同的 来源,有些是我们自己创建的,但大多数会自己注册并 我们希望启用其他身份提供商,例如 Github 或 Google, 因此 Azure B2C AD 而不是 Azure Active Directory。我们也想 将这些用户(包括一些自行注册的用户)放入 组。
基本身份验证工作流程(包括注册流程) 工作:我们在 B2C 租户中创建了一个应用程序,启用了 Web API 访问, 生成用于登录和签名的客户端密码和用户流 设置并设置我们的第 3 方身份提供商。
我们在
https://<tenant>.b2clogin.com/tfp/<tenant>.onmicrosoft.com/<user-flow>/oauth2/v2.0/authorize?client_id=<client-id>&redirect_uri=<redirect-uri>&scope=<client-id>&response_type=code
用户返回一个有效的授权码,我们用它来
使用以下 POST 数据从 https://<tenant>.b2clogin.com/tfp/<tenant>.onmicrosoft.com/<user-flow>/oauth2/v2.0/token 请求访问令牌:
{
"code":"<authorization-code>",
"client_id":"<client-id>",
"client_secret":"<client-secret>",
"redirect_uri":"<redirect-uri>",
"grant_type":"authorization_code"
}
然后我们想使用这个访问令牌来获取用户的个人资料数据 (包括用户名、电子邮件和组成员身份)来自 Azure AD Graph API (https://graph.windows.net//me?api-version=1.6)。文档 明确表示 B2C 目录不得使用新的 Microsoft 图 APIhttps://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet
API 响应令牌已过期:
<?xml version="1.0" encoding="utf-8"?><error
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><code>Authentication_ExpiredToken</code><message
xml:lang="en">Your access token has expired. Please renew it before
submitting the request.</message></error>
但https://jwt.ms/解码的令牌中的时间戳却另有说明:
{
"typ": "JWT",
"alg": "RS256",
"kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
"iss": "https://<tenant>.b2clogin.com/<id>/v2.0/",
"exp": 1553689573,
"nbf": 1553685973,
"aud": "<client-id>",
"idp": "github.com",
"name": "<username>",
"oid": "<oid>",
"sub": "<sub>",
"emails": [
"<email>"
],
"tfp": "B2C_1_SignupAndSignin",
"azp": "<client-id>",
"ver": "1.0",
"iat": 1553685973
}.[Signature]
但是,令牌中的 aud 只是我们的应用程序,而不是 Azure AD
图形 API。这表明 Azure B2C AD 颁发的令牌是
对 Graph API 根本无效。
所以我们的问题是,正确的方法是:
- 为 B2C AD 用户获取访问令牌,这将允许我们获取用户信息
- 读取经过身份验证的 B2C AD 用户的个人资料和组成员身份
Secure API with Azure AD/B2C users 的一些答案建议创建第二个应用程序来查询 Graph API。这是实现我们目标的唯一途径吗?
【问题讨论】:
标签: azure oauth-2.0 azure-ad-b2c