问题描述
我们为 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/
谢谢,
拉杰