问题描述
我正在尝试使用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,并且在“基本授权”标头中对其进行配置是标准做法:
可见
以下是有关该消息的重要了解:
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中。是什么让我失望。
希望这对其他人有帮助。