访问令牌不工作Azure AD自定义策略

访问令牌不工作Azure AD自定义策略,azure,azure-ad-b2c,Azure,Azure Ad B2c,我为Azure B2C制定了一个自定义策略,添加了jwt.ms作为回复URL,一切似乎都很正常。当我登录时,我会被重定向到jwt.ms,显示令牌及其内容。然而,当我尝试将我的角度前端链接到这个自定义策略时,它似乎不起作用。需要响应类型id\u token token,但当我使用此响应类型时,会出现错误“此应用程序没有足够的权限访问此web资源以执行此操作。” 当我使用响应类型id\u令牌时,它似乎工作得很好,我得到了一个带有JWT令牌的回复 我认为问题可能出在应用程序下的隐式授权设置中,因此我尝

我为Azure B2C制定了一个自定义策略,添加了jwt.ms作为回复URL,一切似乎都很正常。当我登录时,我会被重定向到jwt.ms,显示令牌及其内容。然而,当我尝试将我的角度前端链接到这个自定义策略时,它似乎不起作用。需要响应类型
id\u token token
,但当我使用此响应类型时,会出现错误“此应用程序没有足够的权限访问此web资源以执行此操作。”

当我使用响应类型
id\u令牌时,它似乎工作得很好,我得到了一个带有JWT令牌的回复

我认为问题可能出在应用程序下的隐式授权设置中,因此我尝试为所有应用程序启用访问令牌和ID令牌,但这没有帮助

请求如下:

https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/oauth2/v2.0/authorize
?p=b2c_1a_signup_signin&client_id={client_id}
&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2F&response_type=id_token%20token
&scope=openid%20https%3A%2F%2F{tenant}.onmicrosoft.com%2Fapi%2Fuser_impersonation
&nonce={nonce}
&state={state}
因此,如果替换字符,则如下所示:

https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/oauth2/v2.0/authorize
?p=b2c_1a_signup_signin&client_id={client_id}
&redirect_uri=http://localhost:4200/&response_type=id_token token
&scope=openid https://{tenant}.onmicrosoft.com/api/user_impersonation
&nonce={nonce}
&state={state}
我希望登录流同时返回JWTID令牌和访问令牌

编辑:
我用标准的Signupsignin用户流创建了一个全新的B2C租户,但我仍然遇到同样的问题。因此我得出结论,这不是一个自定义策略问题,而是由Azure或前端应用程序中的配置引起的问题

经过大量的实验,我才知道你的问题。我猜你没有尝试正确的格式。连我都不知道你被推荐去哪份文件。好的,第一个问题是

您收到此错误
“此应用程序对此web资源没有足够的权限来执行此操作”

原因

您尚未在azure portal上的目标应用程序中设置API访问权限。要实现这一点,您必须在应用程序上添加
API访问权限

假设您在B2C租户应用程序上有两个
已发布的作用域,如下所示:

创建API访问

要避免上述错误,请添加API访问。要执行此操作,请转到您的应用程序,选择
API访问
,然后您将看到顶部的
Add
按钮。单击并打开右侧的
API访问
窗口,只需单击
Ok
。请参见下面的屏幕截图:

成功
API访问后
应该如下所示

注意:希望它能解决您尝试发送请求时出现的错误

B2C id_令牌和访问令牌

对于
Id\u令牌

ID令牌访问过程

?

client_id=您的应用程序id

&redirect_uri=来自应用程序的回复

&scope=openid

&响应类型=id\u令牌

查看下面的
Id\u令牌

注意:只需填写上述格式并粘贴到浏览器中,中间没有空格。如果正确,则将显示登录页面 提示。登录后,您将在浏览器上获得id_令牌

B2C访问令牌

请按照
邮递员
中的以下格式操作:

授权类型:授权代码

回调URL:您的回复URL

AuthURL:

访问令牌URL:

客户端ID:您的应用程序ID

客户端密钥=应用程序密钥

范围=您发布的任何
范围

人工请求后流程

转到邮递员,点击
授权
选项卡,选择
类型
as
OAuth 2.0
查看以下屏幕截图:

要获取访问令牌,请单击“获取新访问令牌”
,您将在下面的窗口中得到提示,请使用上述格式填写

点击
请求令牌
按钮后,成功登录后将提示您登录窗口,您将获得
访问令牌
。如下图所示:

注意:在B2C中,不支持在单个请求中同时获取“Id令牌”和“访问令牌”。你必须在十年内实现它 单独请求。有关更多详细信息,请参阅


如果您仍然有任何问题,请随时在评论中分享。谢谢你,快乐编码

你在Azure portal上启用隐式授权了吗?我在哪里可以这样做,这不是我在所有应用程序上启用的选项吗?请看一看。如果你还有什么问题,请告诉我。谢谢蒂姆。在Azure AD B2C刀片中,您是否已通过API访问选项将前端应用程序的访问权限分配给后端API?后端API和前端应用程序的访问权限是什么意思?我已尝试修复此问题约8小时;这最终解决了我获取访问令牌的问题,谢谢!很高兴听到这有帮助。