3

按照此过程: 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。 " https://i.imgur.com/LhP5kYf.png

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

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

以下是 Azure 门户中注册的应用程序配置的重定向 url: https://i.imgur.com/aqYDJhn.png

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

编辑 1

我修复了 redirect_uri 参数。

4

3 回答 3

3

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

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

于 2019-09-04T14:00:50.723 回答
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

于 2019-09-04T13:59:51.450 回答
0

我收到了这个错误,对我来说,问题是我正在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

于 2021-02-23T16:51:37.097 回答