为啥我无法从 OAuth 2 服务器作为 JSON 接收“访问令牌”并且我需要定义“redirect_uri”?

Posted

技术标签:

【中文标题】为啥我无法从 OAuth 2 服务器作为 JSON 接收“访问令牌”并且我需要定义“redirect_uri”?【英文标题】:Why I cannot receive `Access Token` from OAuth 2 server as JSON and I need to define `redirect_uri`?为什么我无法从 OAuth 2 服务器作为 JSON 接收“访问令牌”并且我需要定义“redirect_uri”? 【发布时间】:2022-01-03 08:16:06 【问题描述】:

我正在尝试从 Okta API 获取 JWT Access Token,它使用标准 OAuth 2 流程,除了使用 sessionToken,因此我可以使用自己的自定义登录表单,而不是重定向到他们的登录页面。

我需要这个 JWT 来访问我的自动化测试中的 API,所以我在 Java 中执行整个 OAuth 2 登录流程。

我做什么:

我将用户名/密码发送到/api/v1/authn,我收到sessionToken 作为回应 在/oauth2/default/v1/token 中使用这个sessionToken 来接收我的JWT

我在此工作流程的第二部分看到了问题,因为即使我不在客户端上,我也需要将 redirect_uri 作为参数传递,并且我希望正确接收 JWT 以响应在我的 Java 项目的 API 调用中使用它。

标准 OAuth2 中是否有一种方法可以获取令牌而无需在 redirect_uri 上返回它,或者这正是 OAuth2 的工作方式,您只能在定义的端点上接收令牌...

【问题讨论】:

【参考方案1】:

不,很遗憾,没有,除非您想改用client_credentials flow。所有其他流程都假定它们是由用户代理执行的,因此应该使用来自 authZ 服务器的信息负载(代码或令牌)重定向到某个应用页面。

但是它是如何阻止你获得令牌的呢?您可以忽略重定向并处理来自授权服务器的响应。您可以查看我在https://devforum.okta.com/t/list-users-and-groups-with-and-administrator-read-only-account-with-no-login-page-prompted/15925/5?u=phi1ipp 中发布的 sn-p 以实现类似的解决方案

【讨论】:

以上是关于为啥我无法从 OAuth 2 服务器作为 JSON 接收“访问令牌”并且我需要定义“redirect_uri”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 PHP 无法从 Js FormData fetch 中获取 $_POST 数据?

为啥我的应用程序无法从我的 API 读取 JSON?

Django OAuth 2 客户端设置 - 客户端无法识别令牌

为啥 google oauth2 playground 无法返回数据?

为啥我在使用 PL/SQL 的 Oauth 2 访问令牌代码中出现此错误?

2.为啥需要 OAuth2