Okta - 检索访问令牌

Okta - Retrieving Access Token

这可能是一个新手问题,但我在 SO 或 Okta forums/guides 上找不到任何答案。我已将我的 Okta 应用程序配置为在用户登录并同意某个范围时重定向到 https://localhost:443/auth/callback。我正在使用隐式授权并且重定向有效,但在我的 /auth/callback 中,请求查询 headers 和 body 不包含访问令牌。只有当我调用 res.end() 时,Express 才会重定向到下面的 URL:

https://localhost/auth/callback#access_token=accessTokenHere&token_type=Bearer&expires_in=3600&scope=openid+phone&state=myState

如何检索访问令牌?我的快递路线:

router.get('/auth/callback', (req, res) => {
    console.log(req.headers);  // no access token here
    console.log(req.body);  // {}
    console.log(req.body); // {}
    res.end(); // redirects to https://localhost/auth/callback#access_token=accessTokenHere&token_type=Bearer&expires_in=3600&scope=openid+phone&state=myState
});

那是因为,URL中#之后的内容叫做URI fragment identifier,它不会被发送到它在浏览器中使用的服务器,可以通过window.location.hash

您可以使用 ? 代替 #(并保持原样),它调用 query parameters 并且可以通过 req.query.query_name 访问,在你的案例 query_name 是 access_token、token_type、expires_in...

[响应模式][1]

[1]:https://github.com/okta/okta-auth-js#responsemode-1 可以设置为以下值之一:片段、form_post、查询或 okta_post_message。 参考:https://developer.okta.com/docs/reference/api/oidc/#request-parameters