我有一个使用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获取用户?
答案 0 :(得分:0)
Okta最近改变了/authn
端点的工作方式。 /authn
端点不再需要身份验证令牌。这样做是为了支持single-page applications。
您的应用程序看起来需要能够获取任意用户的用户信息。在这种情况下,使用Okta API令牌是有道理的。
但是,如果您是从单页应用程序进行该调用,则需要向/users/me
API端点发出请求。