azure 了解魔术链接的id_token流

oyxsuwqo  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(165)

我有一个SPA应用程序,其.NET核心后端使用AD B2C。SPAAngular 前端使用angular-oauth2-oidc创建loginflow。示例:

this.authConfig = {
      redirectUri: this.envService.redirectUri,
      responseType: this.envService.responseType,
      issuer: this.envService.issuer,
:
      clientId: this.envService.clientId,
      scope: this.envService.scope,
      skipIssuerCheck: true,
      clearHashAfterLogin: true,
      oidc: true,
      logoutUrl: this.envService.logoutUrl,
      showDebugInformation: true,
    };
:     this.oauthService.configure(this.authConfig);
      this.oauthService.tokenValidationHandler = new NullValidationHandler();
      const helper = new JwtHelperService();
      let url = this.DiscoveryDocumentConfig.signInURL;
      :
      :
      this.oauthService.loadDiscoveryDocument(url).then(() => {
            this.oauthService.tryLoginImplicitFlow().then(() => {
                if (!this.oauthService.hasValidAccessToken()) {
                       this.oauthService.initImplicitFlow();

现在我使用魔术链接登录到应用程序,魔术链接的策略提取声明并发出id_token(示例-https://github.com/azure-ad-b2c/samples/tree/master/policies/sign-in-with-magic-link)。在这种情况下,我是否需要自己创建会话,还是由AD B2C处理相同的事务?
从id_token访问应用程序是否支持通过msal或angular-oauth2-oidc?任何指针都将是有用的。
谢谢

2guxujil

2guxujil1#

我认为有必要澄清一下。首先,即使您使用魔术链接,Azure AD B2C也会以与使用用户名和密码进行身份验证完全相同的方式处理用户会话。在本场景中,您将id_token_hint传递给Azure AD B2C(连同状态参数),Azure AD B2C验证令牌,提取声明并返回专用于您的应用程序的ID令牌。在AD B2C端创建用户会话。
我使用了带Angular的MSAL.js(我强烈推荐),它会自动处理会话,但您也可以配置它。这是官方文档中传递id_token_hint的片段:
https://learn.microsoft.com/en-us/azure/active-directory-b2c/enable-authentication-spa-app-options#pass-an-id-token-hint
还有一个重要的事实:

  • Azure Active Directory(Azure AD)通过在用户首次进行身份验证时设置会话Cookie来启用SSO。MSAL.js还在每个应用程序域的浏览器存储中缓存用户的ID令牌和访问令牌。这两种机制(即Azure AD会话Cookie和MSAL缓存)彼此独立,但共同提供SSO行为:*

https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-js-sso
在本例中,msal.js使用浏览器存储(会话存储或本地存储)来存储令牌。此外,Azure AD B2C还放置了一个Cookie来保存有关用户会话的信息。这就是为什么即使您在浏览器存储中没有令牌并打开登录页面,Azure AD B2C会自动让你登录而不需要凭据(当然是在会话仍然活跃的条件下)。我希望这能有所帮助。

相关问题