我目前正在学习.Net的OAuth2服务器,似乎OWIN提供了一个很好的解决方法来轻松实现这种服务器。
我尝试过Microsoft示例:https://docs.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
,并且票证应该已经结算/反序列化。
但无论我怎么试,结果总是无效的。
我查看了原始样本,我发现它成功获得了使用WebServerClient
的访问令牌。但由于我的目的是提供不限于.Net客户端的服务,所以我必须确保我可以在没有库的情况下检索令牌。
有没有人有任何建议?
更新1
我已经连接了clientID& clientSecret到7890ab:7890ab
并将字符串编码为base 64 string Nzg5MGFiOjc4OTBhYg==
,然后附加到标题Authorization=Basic Nzg5MGFiOjc4OTBhYg==
,后者没有改变任何内容
答案 0 :(得分:0)
经过两周的尝试,我发现基本部分我错了,我希望能保存下面的程序员'遇到这个问题的时间;
当使用Authorization Code
HTTP GET
方法时,redirect_uri
的值应该被编码(例如http%3A%2F%2Flocalhost%3A50150%2Fcallback%2F
)
但是,在代码获得并按Access Token
HTTP POST
方法进行交易后,请求正文中redirect_uri
的值不应如果要编码,则值应为http://localhost:50150/callback/
,这是导致invalid_grand返回的部分。
注意:
时,这些部分也应该出现redirect_uri
的值在请求之间应该相同,这意味着如果uri在http://
中占优势,或在请求/
时以Authorization Code
结尾},当要求Access Token
参考:我认为以下演示比MSDN更清晰https://github.com/yuezhongxin/OAuth2.Demo