2

我正在尝试使用 adfs 的 oAuth 功能,但正在努力从中获取访问令牌。安装程序是安装在 virtualbox vm 中的 Windows Server 2012 R2 Preview Edition。

我可以通过发出以下命令来获取 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

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

4

3 回答 3

4

我知道线程已经很老了,但是我今天在尝试解决这个错误时经历了地狱。我检查了 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 选项卡。然后它又在那里工作了。

有意义的错误肯定会有所帮助。希望这可以节省一些人许多小时令人沮丧的尝试和错误......

于 2019-01-03T18:51:23.103 回答
1

你在正确的轨道上。您会在重定向 URI 上获得代码。/token现在我们必须使用以下参数向端点发出 POST 请求:

  • code- 您必须使用一些编程逻辑从 URL 中提取此值
  • client_id
  • redirect_uri
  • grant_type- 使用值“authorization_code”

作为响应,您应该获得一个 JWT 访问令牌。

于 2015-02-10T05:04:39.680 回答
0

看起来您使用 HTTP GET 来访问令牌端点,但它应该是 HTTP POST。

于 2015-01-22T15:46:02.283 回答