Angular Oauth2 OIDC-如何检查用户是否已登录



我使用Angular 11和Auguslar oauth-oidc 的版本10

这是检查用户当前是否登录的正确方法吗?

@Injectable({
providedIn: 'root'
})
export class AuthService {
constructor(
private oauthService: OAuthService,
private router: Router,
) {
.
.
.
isLoggedIn(): boolean {
const identityClaim = this.oauthService.getIdentityClaims();
return identityClaim && identityClaim['name'] ? true : false;
}

我觉得这太离谱了。。。我只是在检查身份中是否存在名称字段?

这是如何防止用户在控制台中修改这个变量的——除了在提交api或其他什么时进行服务器端检查之外。

Angular路由保护和拦截器能完成这项工作吗?

谢谢!

检查用户当前是否登录?

取决于您是否在寻找其中之一:

  • (A(用户是否授权进行API调用
  • (B( 用户是否经过验证?我们对他们的身份了解多少

对于(B(身份验证,查看身份声明是完全可以的。对于(A(授权,您通常会这样做:

const isAuthorized = this.oauthService.hasValidAccessToken();

这是因为身份声明在SPA中仅有用,而访问令牌通常是发送到API的承载令牌,后者再次对令牌进行自己的验证和检查。

这如何防止用户在其控制台中修改此变量

这是浏览器应用程序固有的。您无法阻止用户(或坏浏览器(篡改在浏览器中运行的代码。这就是为什么当您发送访问令牌时,服务器必须自己进行检查的原因。

Angular路由保护和拦截器能完成这项工作吗?

默认情况下,角度路由对OAuth2/OIDC一无所知。您可以看到我的示例路由保护,它确实检查身份验证,它只是间接地检查hasValidAccessToken()

拦截器本身也不知道OAuth2/OIDC,但如果在库的OAuthModuleConfig中配置resourceServer,则会从库中注册一个默认的拦截器,该拦截器会将访问令牌与所有请求一起发送到一组特定的API。

最新更新