Azure AD单点登录 - 请求令牌时出现invalid_grant 9002313错误码

6
我们有一个采用ASP .NET Core和Angular前端的现有解决方案,并具备自己的用户管理系统。现在我想使用Azure Active Directory来实现注册和登录。
我已经成功设置了AD应用程序和前端逻辑以获取代码。然后,我将其传递到我们的后端,与密钥一起生成令牌。当调用/oauth2/token端点时,我收到此错误。
{
    "error": "invalid_grant",
    "error_description": "AADSTS9002313: Invalid request. Request is malformed or invalid.\r\nTrace ID: 0a741bc7-c4a7-4699-af50-4e95a5690b00\r\nCorrelation ID: b83b609c-7cdc-4ad6-ae88-6aa07b4243f8\r\nTimestamp: 2020-05-22 19:22:24Z",
    "error_codes": [
        9002313
    ],
    "timestamp": "2020-05-22 19:22:24Z",
    "trace_id": "0a741bc7-c4a7-4699-af50-4e95a5690b00",
    "correlation_id": "b83b609c-7cdc-4ad6-ae88-6aa07b4243f8",
    "error_uri": "https://login.microsoftonline.com/error?code=9002313"
}

我可以用Postman重现这个问题。我尝试了tenantid(Guid)以及名称xxx.onmicrosoft.com。

在此输入图片描述

这是在Azure AD中的配置: 在此输入图片描述


您应该使用POST来兑换代码。而且在表单数据中不需要包含租户信息。请参阅https://learn.microsoft.com/en-us/azure/active-directory/azuread-dev/v1-protocols-oauth-code以获取示例。 - maweeras
谢谢@maweeras,但那并没有解决问题。我之前尝试过使用GET和POST,并且已经研究了几天同样的文档,以防我错过了什么。即使不使用租户和资源(这是可选的),使用POST仍然会给出相同的错误。这可能与Azure Directory端的应用程序配置有关吗? - Stefan R.
大多数OAuth流程需要将https作为重定向URI。提供的屏幕截图没有利用安全通道。您能否尝试使用Https进行重定向? - David Crook
1个回答

7

您可以按照我的流程尝试获取代码

首先注册应用程序,转到 Azure 门户: 输入图像描述此处 输入图像描述此处

然后在浏览器中输入此链接以获取代码:

https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id={your-client-id}
&response_type=code
&redirect_uri=https://localhost:4500/web/completeoauth/ms
&response_mode=query
&state=12345

enter image description here enter image description here

最后使用Postman获取访问令牌(按照我的请求进行配置):enter image description here 希望能够帮到您!

谢谢,但我真的不明白你的意思。我没有看到你的POST配置和我的有什么区别。但我不知道如何使用jwt.ms创建流程...我正在使用HTTP本地重定向... - Stefan R.
1
@StefanR.s 你可能误解了我的意思。你的配置没有问题。使用任何类型的重定向都没有关系。我也可以通过使用你的重定向地址来获取访问令牌。我的意思是,当使用“code”时,你可能复制了额外的内容。 - Carl Zhao
1
@StefanR。由于"代码"有有效期限,您需要获取新的"代码"。在使用 "代码"时要小心,不要拦截多余的内容。 - Carl Zhao
我非常小心地使用从回调URL中提取的代码,没有任何额外的内容。此外,对于每个测试,我都使用一个新代码(使用我的预备UI生成),即使获取令牌的POST以BadRequest结束。 无论如何,如果只是关于无效代码的问题,我希望错误会更具体一些。我担心有一个我没有看到的小细节缺失,或者AD应用程序配置仍然存在问题。 也许我应该创建另一个沙盒来进行比较... - Stefan R.
最终我解决了这个问题。@carl Zhao,你的解决方案非常完美。我只是在内部URL管理方面遇到了问题,我们将回调转换为小写字母,导致代码无效。无论如何,还是感谢大家的帮助!! - Stefan R.
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接