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

问题描述 投票:0回答:5

遵循此程序: https://learn.microsoft.com/en-us/graph/auth-v2-user

我正在尝试从此微软端点获取刷新令牌: https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/authorize

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

我尝试在 Azure 门户中设置一些重定向 url,包括:

https://automation.legroupeti.com/Configurations/GetRefreshToken/
https://automation.legroupeti.com/Configurations/GetRefreshToken
https://automation.legroupeti.com/
https://automation.legroupeti.com

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

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

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

编辑1

我修复了redirect_uri参数。

asp.net-core azure-active-directory microsoft-graph-api dotnet-httpclient refresh-token
5个回答
6
投票

我收到此错误,对我来说问题是我将发布请求中的

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://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow#request-an-access-token


3
投票

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

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


2
投票

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

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

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


0
投票

我也遇到同样的问题:

AADSTS90102:“redirect_uri”值必须是有效的绝对 Uri。

我在 Chrome 中尝试了几种 URL 变体(带编码、不带编码等),但收到了关于错误 URL 的不同异常。然后我使用 Safari 浏览器,瞧,我得到了一个响应代码。

在最终结果中,我只是从文档中复制了 URL,将注册应用程序中的

tenant
client_id
值粘贴到
return_url
参数中,而不是粘贴
/myapp/
前缀,其中
%3A8080
这是
%3A
符号。
:
参数必须与注册应用程序中的 URL 相同。
    


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.