如何修复“AADSTS90102:‘redirect_uri’值必须是有效的绝对 Uri。” Microsoft Graph 中的错误

Posted

技术标签:

【中文标题】如何修复“AADSTS90102:‘redirect_uri’值必须是有效的绝对 Uri。” Microsoft Graph 中的错误【英文标题】:How to fix "AADSTS90102: 'redirect_uri' value must be a valid absolute Uri." error in Microsoft Graph 【发布时间】:2019-09-04 13:32:58 【问题描述】:

按照以下步骤: https://docs.microsoft.com/en-us/graph/auth-v2-user

我正在尝试从这个 microsoft 端点获取刷新令牌: https://login.microsoftonline.com/tenantId/oauth2/v2.0/authorize

使用来自 nuget (asp.net core 2.2) 库的 System.Net.Http.HttpClient 类的 PostAsync 方法,我能够得到一个带有此错误的响应:" AADSTS90102:“redirect_uri”值必须是有效的绝对 Uri。”

我尝试在 Azure 门户中设置一些重定向 url,包括: https://automation.legroupeti.com/Configurations/GetRefreshToken/ https://automation.legroupeti.com/Configurations/GetRefreshToken https://automation.legroupeti.com/ https://automation.legroupeti.com

发布请求如下(使用来自 nuget (asp.net core 2.2) 的 System.Net.Http.HttpClient 类的 PostAsync 方法):

以下是 Azure 门户中注册应用程序配置的重定向 URL:

我期望来自端点的有效响应。 如何将redirect_uri 配置为有效?

编辑 1

我修复了 redirect_uri 参数。

【问题讨论】:

【参考方案1】:

从截图看来,URLEncoding 不正确。路径中的“/”字符应编码为 %2F,而您的代码具有 %2。 (在“.com”之后和“配置”之前。)

另外,您是否考虑过 SDK 中的授权提供程序? https://docs.microsoft.com/en-us/graph/sdks/choose-authentication-providers?tabs=CS#AuthCodeProvider

【讨论】:

好的,这是一个很好的捕获,我确实修复了值,请参阅编辑 1。遗憾的是,它没有解决问题。【参考方案2】:

您似乎混合了授权和令牌端点。

如果您希望用户进行身份验证,您必须将用户重定向到该 URL,而不是向其发送 POST 请求。 用户返回您的应用后,您需要将授权码兑换为令牌。 文档:https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-web-app-call-api-overview

如果您想要一个仅用于您的应用的令牌而无需用户身份验证,您需要调用令牌端点。 文档:https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-daemon-overview

【讨论】:

我正在尝试使用login.microsoftonline.comtenantId/oauth2/v2.0/authorize 端点来获取授权码。这就是为什么我在login.microsoftonline.comtenantId/oauth2/v2.0/authorize 上做一个帖子请求。使用以下参数:client_id、response_type、redirect_uri、response_mode、client_secret、范围和状态。如这里描述:docs.microsoft.com/en-us/graph/auth-v2-user,响应应该是用户需要同意的页面,然后它应该在同意后重定向到redirect_uri。 您无法通过发布请求获得授权码。您需要在那里重定向用户浏览器。 重定向用户而不是发帖到 url 确实解决了这个问题。【参考方案3】:

我收到此错误,对我而言,问题是我将发布请求中的 redirect_uri 值编码到 /oauth2/v2.0/token 端点。注意redirect_uri 没有在这个请求中编码。

POST /Tenant ID/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
Cookie: cookie
Content-Length: 941

client_id=Application (client) ID
&scope=https://graph.microsoft.com/mail.read
&redirect_uri=http://localhost/myapp/
&grant_type=authorization_code
&client_secret=secret
&code=code

我使用微软提供的 Postman 示例来查找根本原因。

https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow#request-an-access-token

【讨论】:

以上是关于如何修复“AADSTS90102:‘redirect_uri’值必须是有效的绝对 Uri。” Microsoft Graph 中的错误的主要内容,如果未能解决你的问题,请参考以下文章

如何修复漏洞

如何修复WMI

PHP网站漏洞怎么修复 如何修补网站程序代码漏洞

如何修复这些漏洞? (npm audit fix 无法修复这些漏洞)

如何修复AppScan漏洞

如何在DOS环境下修复系统