OpenID 连接成功的响应在重定向 uri 和访问令牌之间有 #
Posted
技术标签:
【中文标题】OpenID 连接成功的响应在重定向 uri 和访问令牌之间有 #【英文标题】:OpenID connect Successful response has # between redirect uri and access token 【发布时间】:2021-09-28 13:09:47 【问题描述】:我已经使用 JWT 在 Azure 广告中为 Oauth 2.0 设置了一个应用程序,访问令牌已成功返回,但 URL 在重定向 URL 和 access_token 之间有一个井号 (#)。应用程序需要一个问号(?)来完成该符号,所以如果我将 # 替换为 ?在地址栏上签名过程完成。
有没有办法从 Azure 应用注册本身执行此操作,以便返回带有 ?代替 #?还是我应该以不同的方式发送请求?
下面是请求
https://login.microsoftonline.com/<tenant>/oauth2/v2.0/authorize?client_id=<client_id>&response_type=token&redirect_uri=<url_encoded_redirect_uri>&scope=<scope>&response_mode=fragment&state=12345&nonce=678910
【问题讨论】:
【参考方案1】:在请求中,response_mode 必须是 form_post 而不是 Fragment。解决了这个问题
https://login.microsoftonline.com/<tenant>/oauth2/v2.0/authorize?client_id=<client_id>&response_type=token&redirect_uri=<url_encoded_redirect_uri>&scope=<scope>&response_mode=form_post&state=12345&nonce=678910
参考 - https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-protocols-oidc#send-the-sign-in-request
【讨论】:
以上是关于OpenID 连接成功的响应在重定向 uri 和访问令牌之间有 #的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 以编程方式向 MVC 控制器验证 Azure Ad/OpenId 并获取重定向 uri
使用 java servlet 在重定向响应中丢失 HTTP 自定义标头