我试图使用adfs的oAuth功能,但很难从中获取访问令牌。 该安装程序是安装在virtualbox vm中的Windows Server 2012 R2预览版。
我可以通过发出以下内容来获取access_code:
https://asdf.bla.dev/adfs/oauth2/authorize?response_type=code&client_id=abcd-abcd-abcd&redirect_uri=https://localhost/auth&resource=testservice.asdf.oauth
这会将我重定向到以下网址
https://localhost/auth?code=U2dIhBsRt0eDnEhAEq2fcw.d3LeME__0QgBAC8zvLR6mTlRvC0.fLKd5eQRjXslTEeEck17m6Zo4fKKO9oGk2byUyr4CyLQHKSJs5wKzWZcusLXqXk22tdzvswxBjzaYcCqzkbeT5VxhMEdq97vbSnGAQ1tVD0vutVIfbx1Mb5A-QItgOx8a8LBapn7axCpGThoVH2jWCVM59X5eOt9ACuJTTK1UFbNaldaTkuGdqrtcGC8tFoSOP96G-4sHgIBpi2t8BSwCdf3asDd3AJAOYk6gnUkH5WJQRf2pg4S_AkgOxseeZW8Y5qbWAajyESkEmJ-UcWkV98uHlrmNsFwTSJ-ZoNk-aZI_U85ZlZrsdpKzocrWM5HmfcvXm5XdXz2QXIHngIBTA
但是当我尝试使用此请求兑换令牌时:
https://asdf.bla.dev/adfs/oauth2/token?grant_type=authorization_code&client_id=abcd-abcd-abcd&redirect_uri=https://localhost/auth&code=U2dIhBsRt0eDnEhAEq2fcw.d3LeME__0QgBAC8zvLR6mTlRvC0.fLKd5eQRjXslTEeEck17m6Zo4fKKO9oGk2byUyr4CyLQHKSJs5wKzWZcusLXqXk22tdzvswxBjzaYcCqzkbeT5VxhMEdq97vbSnGAQ1tVD0vutVIfbx1Mb5A-QItgOx8a8LBapn7axCpGThoVH2jWCVM59X5eOt9ACuJTTK1UFbNaldaTkuGdqrtcGC8tFoSOP96G-4sHgIBpi2t8BSwCdf3asDd3AJAOYk6gnUkH5WJQRf2pg4S_AkgOxseeZW8Y5qbWAajyESkEmJ-UcWkV98uHlrmNsFwTSJ-ZoNk-aZI_U85ZlZrsdpKzocrWM5HmfcvXm5XdXz2QXIHngIBTA
出现错误,我没有获得访问令牌。
adfs服务的事件查看器指出以下错误:
路径/ adfs / oauth2 / token上没有注册的协议处理程序来处理传入的请求....
我根据以下信息构建了请求:https://github.com/nordvall/TokenClient/wiki/OAuth-2-Authorization-Code-grant-in-ADFS
我不知道出了什么问题,非常感谢你的帮助!
答案 0 :(得分:3)
我知道线程很旧,但是今天尝试解决此错误时遇到了麻烦。我检查了http.sys,重新安装了服务器角色,...无济于事。
最后,我不得不发现这个疯狂的ADFS确实(再次)返回了垃圾错误消息。经过5个小时的调试,我不再信任邮递员了(即使它已经工作了好几个月了),并使用一个简短的PowerShell脚本来调用带有访问代码的POST:
$client = new-object net.webclient
$form = New-Object System.Collections.Specialized.NameValueCollection
$form.Add("client_id", "you client id")
$form.Add("grant_type", "authorization_code")
$form.Add("code", "authorization code")
$form.Add("redirect_uri", "your redirect uri")
$result = $client.UploadValues("https://sso.mydomain.com/adfs/oauth2/token", "POST", $form)
$decodedToken = $client.Encoding.GetString($result);
等等,一切正常。因此,我回到了损坏的邮递员查询,剥离了所有url参数,删除了所有标头,然后将参数添加到x-www-form-urlencoded标签中。然后它又在那里工作了。
有意义的错误肯定会有所帮助。希望这可以为某人节省许多小时的令人沮丧的try&error ...
答案 1 :(得分:1)
你走在正确的轨道上。您可以获得重定向URI的代码。现在,我们必须使用以下参数向/token
端点发出POST请求:
code
- 您必须使用某些编程逻辑从URL中提取此值client_id
redirect_uri
grant_type
- 使用值“authorization_code”作为回应,您应该获得JWT访问令牌。
答案 2 :(得分:0)
看起来您使用HTTP GET来访问令牌端点,但它应该是HTTP POST。