ADFS 3.0 oAuth oauth2 / token - >没有注册协议

时间:2015-01-22 15:21:06

标签: oauth windows-server-2012-r2 adfs3.0

我试图使用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

我不知道出了什么问题,非常感谢你的帮助!

3 个答案:

答案 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。