在 Postman 中为 Azure AD B2C 请求访问令牌
Posted
技术标签:
【中文标题】在 Postman 中为 Azure AD B2C 请求访问令牌【英文标题】:Request Access Token in Postman for Azure AD B2C 【发布时间】:2018-04-26 18:28:31 【问题描述】:我如何在Postman 中针对Azure AD B2C 租户请求Access Token
?
我尝试从 Azure 门户中的 Run Now
获取 URL 并将其放入 Auth Url
中,但这会产生以下错误:
更新
按照克里斯的回答,我现在已经克服了上述错误。我可以登录,但仍然无法获得访问令牌:
AADB2C90085:服务遇到内部错误。请重新验证并重试。 相关 ID:45c56d47-4739-465f-8e02-49ba5b3a1b86 时间戳:2017-11-16 15:27:52Z
【问题讨论】:
"AADB2C90085: 服务遇到内部错误。请重新验证并重试。" 如果客户端密码已过期,Azure AD B2C 会返回此错误消息。可能还有很多其他原因,但检查是一回事。 【参考方案1】:进行此设置有点令人头疼。这是我从这个线程中的答案拼接在一起的内容,更新以利用 Postman 的 Grant Type: Authorization Code (With PKCE)
起点也归功于https://blogs.aaddevsup.xyz/2020/08/performing-azure-ad-oauth2-authorization-code-grant-flow-with-pkce-in-postman/。
使用:Azure B2C 租户、JS SPA 前端、Azure Function 后端。
Azure 门户 (Azure AD B2C)
SPA 和后端的设置或多或少如本 MS 文档中所述(小心,某些部分已过时!):https://docs.microsoft.com/en-us/azure/api-management/howto-protect-backend-frontend-azure-ad-b2c
@ SPA 应用程序注册 > 身份验证刀片 > 将此值添加到“单页应用程序重定向 URI”
https://oauth.pstmn.io/v1/callback
@Azure AD B2C |应用注册,点击“端点”(蓝色地球图标@顶部)
记录 Azure AD B2C OAuth 2.0 令牌端点 (v2) 和 Azure AD B2c 2.0 授权端点 (v2)
邮递员
授权:Oauth 2.0 将身份验证数据添加到:请求标头配置新令牌
代币名称:WhateverYouWant
授权类型:使用 PKCE 的验证码
回调网址:https://oauth.pstmn.io/v1/callback
[ ] 使用浏览器授权(未选中)
身份验证 URL:https://.b2clogin.com/.onmicrosoft.com//oauth2/v2.0/authorize
访问令牌 URL:https://.b2clogin.com/.onmicrosoft.com//oauth2/v2.0/token
客户端 ID:
客户端密码:
代码挑战方法:SHA-256
代码验证器:
状态:
范围:类似于 .onmicrosoft.com/Hello
客户端身份验证:在正文中发送客户端凭据
点击[清除cookies]和[获取新访问令牌]
【讨论】:
这对我不起作用 - 在使用 pkce 的身份验证代码时,我至少需要提供客户端密码 @GustavWengel 也许您启用了隐式流?我更喜欢使用 PKCE 的原因之一是它不需要提交客户端密码。我确认上述设置适用于我的配置。如果您想讨论,请随时给我发消息。【参考方案2】:2020-05-26 更新
Microsoft 更改了 Azure Active Directory B2C 的登录 URL,如您所见 here。
所以@spottedmahn answer 必须更新为:
授权类型:Implicit
回调 URL:我的 B2C 应用中定义的任何 URL
授权网址:https://tenant.b2clogin.com/te/tenant.onmicrosoft.com/policy/oauth2/v2.0/authorize
客户端 ID:来自我的 B2C 应用程序的应用程序 ID
范围:https://tenant.onmicrosoft.com/web api app id uri/scope name
客户端认证:任意一个都无所谓
【讨论】:
您好 NDalvise ? - 请随时更新我的答案,因此我们只有一个答案供 SO 用户快速找到解决方案【参考方案3】:使用@Chris Padgett's answer,我能够使用Implicit
授予类型使其工作(无法使用授权代码格兰类型使其工作)。
授权类型:Implicit
回调 URL:我的 B2C 应用中定义的任何 URL
授权网址:https://login.microsoftonline.com/te/tenant/policy/oauth2/v2.0/authorize
客户 ID:Application ID
来自我的 B2C 应用
范围:https://tenant.onmicrosoft.com/web api app id uri/scope name
客户端认证:Either one, it didn't matter
【讨论】:
嘿,我只是想说谢谢你用这些 B2C 的东西记录了所有的困难 - 在我寻找答案的任何地方我看到 spotmahn 已经提出了这个问题,完成了研究并得到了答案,通常成功!它非常有用,比试图找出微软(通常)关于该主题的过时文档要好得多。荣誉。 嘿@pcdev - 不客气!这需要一个社区,对吧!顺便说一句,我试着在 Twitter 上寻找你,因为它不会让 SO cmets 膨胀。你的评论让我很开心!谢谢!! 有没有人在你试图用 Postman 测试的 API 由 Azure 函数提供服务器的情况下工作?我有适用于 aspnet MVC 应用程序的 spotmahn/microsoft 方法,但它不适用于使用相同 azure b2c 租户的 Azure Function App。我将为此发布一个单独的问题.... 嗨@ubiienewbie - 你发布了以下问题吗?如果是这样,你可以分享链接吗?谢谢 @spottedmahn: ***.com/questions/49304238/… - 干杯!【参考方案4】:我可以在 Postman 中获得适用于两种授权类型的 B2C 请求访问令牌:grant_type=implicit
和 grant_type=authorization_code
。我已经打开了一个关于MS documentation的问题:
grant_type=authorization_code"
也是可能的(参见说明):https://github.com/aspnet/Docs/issues/10336
以下更改是必要的:
grant_type=implicit
和grant_type=authorization_code
之间的唯一区别是grant_type=authorization_code
需要更多参数,如下所示:
访问令牌(访问令牌请求) URL:https://login.microsoftonline.com/"tenant-name".onmicrosoft.com/oauth2/v2.0/token?p=B2C_1_"name-of-your-signup-signin-流”
client_secret:为您的应用程序生成密钥:Azure 门户 -> Azure AD B2C -> 应用程序 -> -> 密钥 -> 生成密钥
【讨论】:
【参考方案5】:我只是想为繁荣添加一些额外的信息,因为我最近花了很长时间试图解决与错误 AADB2C90085 相关的问题,而这个问题是 Google 上为数不多的结果之一。
更新
按照克里斯的回答,我现在已经克服了上述错误。我可以登录,但仍然无法获取访问令牌:
AADB2C90085:服务遇到内部错误。请重新验证并重试。相关 ID:45c56d47-4739-465f-8e02-49ba5b3a1b86 时间戳:2017-11-16 15:27:52Z
还有:
使用@Chris Padgett 的回答,我能够使用隐式授权类型使其工作(无法使用授权代码格兰类型使其工作)。
我在使用授权代码流时收到此错误,因为我的 B2C_1A_TokenSigningKeyContainer 和 B2C_1A_TokenEncryptionKeyContainer 生成错误。一旦我按照Get started with custom policies in Azure Active Directory B2C 的指南进行操作,错误就会停止发生。
链接中的相关摘录:
创建签名密钥
选择策略密钥,然后选择添加。 对于选项,选择生成。 在名称中,输入 TokenSigningKeyContainer。前缀 B2C_1A_ 可能会自动添加。 对于密钥类型,选择 RSA。 对于密钥用法,请选择签名。 点击创建。
创建加密密钥
选择策略密钥,然后选择添加。 对于选项,选择生成。 在名称中,输入 TokenEncryptionKeyContainer。前缀 B2C_1A_ 可能会自动添加。 对于密钥类型,选择 RSA。 对于密钥使用,选择加密。 点击创建。
【讨论】:
【参考方案6】:对于 Auth URL 字段,您只需输入不带查询字符串参数的授权端点 URL:
https://login.microsoftonline.com/te/tenant/policy/oauth2/v2.0/authorize
对于访问令牌 URL 字段:
https://login.microsoftonline.com/te/tenant/policy/oauth2/v2.0/token
对于回调 URL 字段,您必须输入在 Azure AD B2C 应用程序中注册的回复 URL,例如:
https://www.getpostman.com/oauth2/callback
对于 Scope 字段,输入“openid”以及任何 API 访问范围。
对于客户端身份验证字段,选择“在正文中发送客户端凭据”。
【讨论】:
我收到The redirect URI '/' provided in the request is not registered for the client id '60a724bd-a41b-4387-806b.....
我已经用回调 URL 的示例更新了上述答案,该回调 URL 也必须向 Azure AD B2C 应用程序注册。
感谢克里斯,但仍然没有运气。我已经尝试了上述回调和jwt.ms,但我得到了一个内部错误。我已经更新了我的问题。
能否请您更换屏幕截图删除任何秘密值?
当然可以。我一直在使用客户的租户。让我试试我个人的,这样我就可以分享一切。以上是关于在 Postman 中为 Azure AD B2C 请求访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
Azure AD B2C:注销社交帐户(使用 OIDC 的 Azure AD)
Azure AD 与 Azure AD B2C 与 Azure AD B2B
Azure AD B2C 租户和普通 Azure AD 租户有啥区别?