使用 Okta 授权外部 API 调用

问题描述

我们为 Vue 前端应用程序设置了 Okta 应用程序 (SPA)/授权服务器,供用户登录。我们试图让用户登录我们的 Vue 应用程序时,我们可以使用 Okta 的“会话”将请求发送到我们的外部 .Net Core API 并验证用户是否通过 Okta 登录并可以点击指定的端点(此处唯一的条件是用户登录且仍具有有效会话)。

我看到 Okta 在登录后会在本地存储上放置一些 access / id 令牌,但目前我已经掌握了这些。

有没有办法通过 Okta 做到这一点,还是我们必须创建/存储/管理我们自己的 JWT

解决方法

对于授权,您应该将访问令牌(来自 Okta)作为不记名令牌传递给您的 .net api。

请找到我们的示例应用 here

,

如您所见,Okta SDK 默认将 JWT 令牌存储在 localstorage 中。 您可以使用 Okta 的 AuthJS SDK(您可能已经在使用它),您可以使用以下代码来检索令牌:

authClient.tokenManager.get('accessToken')
.then(function(token) {
  if (token && !authClient.tokenManager.hasExpired(token)) {
    // Token is valid
    console.log(token);
  } else {
    // Token has been removed due to expiration or error while renewing
  }
})
.catch(function(err) {
  // handle OAuthError or AuthSdkError (AuthSdkError will be thrown if app is in OAuthCallback state)
  console.error(err);
});

然后,您可以在调用外部 API 时将访问令牌作为不记名令牌传递。服务 API 请求的资源服务器应该使用自省或本地验证来验证这些 OAuth 令牌。您可以在此处找到更多详细信息:https://developer.okta.com/code/dotnet/jwt-validation/

谢谢,
拉杰