Okta身份验证有效,但获取用户ID会提供无效令牌

时间:2016-04-18 17:40:42

标签: okta okta-api

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

1 个答案:

答案 0 :(得分:0)

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

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

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