Okta自省端点始终返回false

问题描述

我正在尝试使用here中记录的/introspect端点来验证刚获得的Okta OIDC访问令牌。我知道令牌是很好的,因为我是在验证后才从浏览器的调试器中获得的。

不知道为什么,但是端点始终返回false,即

{
    "active": false
}

我正在邮递员那里尝试这个。这是Postman生成curl代码段。

curl --location --request POST 'https://dev-359971.oktapreview.com/oauth2/v1/introspect' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'token=eyJr...yJPg' \
--data-urlencode 'client_id=0*****************7'

我在Okta的帮助中心here中发现了同样的问题,但是无论解决方案是什么,它都从未发布过。

更新:

我应该提到我的Okta应用已配置为SPA,因此没有client_secret。这就是为什么我的cURL调用中没有Authorization标头的原因。根据Okta的文档here

对于没有client_secret的公共客户端(例如单页和移动应用程序),在调用client_id端点时必须包含/introspect作为查询参数。确保您没有在请求中传递Authorization标头。

解决方法

这是我的dev帐户中的一个有效示例,我在其中使用默认的Authorization Server。您需要同时发送client_id和client_secret,并且在“基本授权”标头中对其进行配置是标准做法:

可见

以下是有关该消息的重要了解:

enter image description here

CURL

如果我输入正确的值,这将从命令行对我有用:

curl --request POST --user myclientid:myclientsecret \
https://dev-843469.oktapreview.com/oauth2/default/v1/introspect \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode token=XXX

API OAUTH注册

您还需要在Okta中将API注册为自省客户端,就像Step 6 of my blog post中一样。

图书馆

任何体面的图书馆都会为您完成大部分工作,例如NodeJS Open Id Client

,

大声疾呼@GaryArcher,让我更接近答案。

我未能指定一个包含okta术语的URI的答案被称为“自定义授权服务器”

意思是,当我应该使用/oauth2/v1/introspect时,我使用/oauth2/${authServerId}/v1/introspect作为端点-在我的情况下最终是/oauth2/default/v1/introspect,因为我使用的是{{1 }}授权标头。

Okta文档here解释了如何构成您的基本URI,并在其中表示“ Okta作为您的应用程序或API的标识平台” 的用例。是我的情况:

用于Okta是资源服务器的授权服务器的用例(例如,您希望Okta充当应用程序的用户存储,但是Okta对用户不可见)。我们将这种授权服务器称为“自定义授权服务器”,您的基本URL如下所示:default

请注意,如果您尝试使用Postman collections that Okta offers进行下载(这是我尝试过的),则https://${yourOktaDomain}/oauth2/${authServerId}不包含在URI中。是什么让我失望。

希望这对其他人有帮助。