当前位置: 首页 > 知识库问答 >
问题:

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

顾涵衍
2023-03-14

我正在尝试使用 adfs 的 oAuth 功能,但正在努力从中获取访问令牌。安装程序是安装在虚拟虚拟机中的Windows Server 2012 R2预览版。

我可以通过发出以下命令来获取访问代码:

https://asdf.bla.dev/adfs/oauth2/authorize?response_type=code&client_id=abcd-abcd-abcd&redirect_uri=https://localhost/auth&resource=testservice.asdf.oauth

这会将我重定向到以下url

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

曾元忠
2023-03-14

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

沃威
2023-03-14

你在正确的轨道上。你得到了重定向URI的代码。现在,我们必须使用以下参数向< code>/tokenendpoint发出POST请求:

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

作为回应,你应该得到一个JWT访问令牌。

云慈
2023-03-14

我知道这个线程很旧,但我今天在尝试解决这个错误时经历了一场地狱。我查了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);

瞧吧...都在工作。所以我回到中断的postman查询,剥离所有url参数,删除所有头并将参数添加到x-www-form-urlencoded选项卡。然后它又在那里工作了。

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

 类似资料:
  • 注册协议 点击进入注册协议页面 1、协议标题:输入协议内容的标题。 2、协议内容:添加协议内容,编辑栏可以对内容进行设置。

  • 注册自定义协议并拦截现有协议请求 进程: 主进程​ 实现类似 file:// 协议的小例子 : 1 const {app, protocol} = require('electron') 2 const path = require('path') 3 app.on('ready', () => { 4 protocol.registerFileProtocol('atom', (request,

  • 本文向大家介绍易语言注册自定义协议Register protocol,包括了易语言注册自定义协议Register protocol的使用技巧和注意事项,需要的朋友参考一下 Register protocol tencent:// thunder:// 是 腾讯 和 迅雷 的协议,即页面上或地址栏里的链接只要输入带有 tencent://… 的协议,就会自动调用一个已写好的程序执行该协议的操作。 或

  • 问题内容: 我试图为类路径协议注册自定义URL处理程序,如另一个线程所述。这是代码: 该测试用例具有以下JVM参数: 该行正确输出,因此正在设置属性。但是,由于上面的调用将引发异常,因此它似乎没有生效。 如果我像注释行中那样显式提供处理程序,则一切都很好。但是,我不想明确提供它-它应该自动完成。 我究竟做错了什么? 问题答案: 我发现了问题。我使用的原始类路径处理程序类具有非默认构造函数。当然,因

  • 我正在创建一个火花上下文通过使用- 然后我创建一个RDD- 现在,当我对这些数据执行一些操作时,比如(f/take rdd 3)等,我得到了一个错误- 17/11/28 14:35:00错误提示:组织遇到异常。阿帕奇。火花SparkException:未能在org向Kryo注册类。阿帕奇。火花序列化程序。KryoSerializer。newKryo(KryoSerializer.scala:129

  • 问题内容: 我正在开发命令行节点模块,希望能够通过网站上的链接启动它。 我想注册一个自定义协议,以使链接具有以下格式:单击它们将启动节点包。 如果没有为此的节点API(我确定不会),那么有什么办法可以通过调用系统命令从node做到这一点? 它必须在Windows,Linux和MacOS上运行。 问题答案: 这是一个有趣的想法。我认为目前没有跨平台的node.js解决方案。我确实遇到了要求同一件事的