无法从授权代码交易访问令牌



我目前正在学习.Net的OAuth2服务器,似乎OWIN提供了一个很好的解决方法来轻松实现这种服务器。

我尝试了Microsoft的例子:https://learn.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server

似乎该示例效果很好,但是当我尝试通过PostMan将授权代码换成访问令牌时,它失败了。

我在请求正文中使用了带有标头Content-Type=application/x-www-form-urlencoded和以下参数的 POST 方法:

grant_type=authorization_code
client_id=7890ab
redirect_uri=http%3A%2F%2Flocalhost%3A50150%2Fcallback%2F
code=d7a91a351ffa4764a22ef3628c94d495443e0043bfc9405b9f1c5113a234a23d
client_secret=7890ab

我跟踪调试器并发现进程传递的事件ReceiveAuthenticationCode并且票证应该已结算/反序列化。

然而,无论我如何尝试,结果总是invalid_grant。


我已经查看了原始示例,我发现它成功地获得了访问令牌WebServerClient.但由于我的目的是提供服务,不仅限于 .Net 客户端,所以我必须确保我可以在没有库的情况下检索令牌。

有人有什么建议吗?


更新 1

我已经将clientID和clientSecret连接到7890ab:7890ab并将字符串编码为base 64字符串Nzg5MGFiOjc4OTBhYg==然后附加到标头Authorization=Basic Nzg5MGFiOjc4OTBhYg==

,没有任何变化

经过 2 周的尝试,我发现我在基本部分是错误的,我希望节省我以下程序员遇到此问题的时间;

当通过HTTP GET方法进行Authorization Code时,应编码redirect_uri的值(例如http%3A%2F%2Flocalhost%3A50150%2Fcallback%2F

但是,在代码获得并通过HTTP POST方法交易Access Token之后,不应对请求正文中的redirect_uri值进行编码,应http://localhost:50150/callback/该值,这是导致返回invalid_grand的部分。

注意:请求之间的redirect_uri值应该相同,这意味着如果 uri 在请求Authorization Code时以http://开头或以/结尾,则在请求Access Token时,这些部分也应该存在

参考:在我看来,以下演示比 MSDN 更清晰 https://github.com/yuezhongxin/OAuth2.Demo

最新更新