1

我有一个使用 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 获取用户?

4

1 回答 1

0

Okta 最近改变了/authn端点的工作方式。/authn端点不再需要身份验证令牌。这样做是为了支持单页应用程序

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

但是,如果您是从单页应用程序进行该调用,您可能希望向/users/meAPI 端点发出请求。

于 2016-04-19T17:25:25.470 回答