【问题标题】:Okta Authentication works but Get User by Id gives Invalid Token ProvidedOkta 身份验证有效,但按 ID 获取用户提供了无效令牌
【发布时间】:2016-04-18 17:40:41
【问题描述】:

我有一个使用 Okta 进行身份验证的 Django 应用:

headers = {
    'Authorization': 'SSWS {}'.format(<okta api token>),
    'Accept': 'application/json',
    'Content-Type': 'application/json'
}
authentication_payload = {
        'username': <username>,
        'password': <password>
}
response = requests.post(
        <okta auth endpoint>,
        headers=headers,
        data=json.dumps(authentication_payload)
)    

这成功了。从响应内容中我可以获取用户 ID:

content = json.loads(r.content.decode('utf-8'))
okta_user_id = content['_embedded']['user']['id']

然后我使用okta_user_id 创建端点以通过 id 获取 okta 用户:

okta_user_endpoint = https://<org>.okta.com/api/v1/users/<okta_user_id>

然后我使用来自身份验证调用的相同标头,具有相同的 api 令牌,并尝试通过 id 获取用户:

user_response = requests.get(
            okta_user_endpoint,
            headers=headers
)

但这并不成功。我收到以下内容的 401 错误:

{
 "errorCode":"E0000011",
 "errorSummary":"Invalid token provided",
 "errorLink":"E0000011",
 "errorCauses":[]
}

使用无效令牌似乎很简单,但如果令牌无效,我如何能够成功进行身份验证调用?如果令牌对身份验证调用有效,为什么不能通过 id 获取用户?

【问题讨论】:

  • 你有什么机会吗?

标签: okta okta-api


【解决方案1】:

Okta 最近改变了/authn 端点的工作方式。 /authn 端点不再需要身份验证令牌。这样做是为了支持single-page applications。

看起来您的应用程序需要能够获取任意用户的用户信息。在这种情况下,使用 Okta API 令牌是有意义的。

但是,如果您是从单页应用程序进行调用,则需要向 /users/me API 端点发出请求。

【讨论】:

  • 所以我使用的 Okta API 令牌可能不再有效?但是身份验证仍然有效,因为它不再需要 Okta API 令牌,而通过 id 端点获取用户确实需要 API 令牌?
猜你喜欢
  • 2017-04-11
  • 2020-06-17
  • 2023-03-08
  • 2012-08-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多