正在尝试使用Azure active directory实现SSO,并使用Azure/MSAL实现API身份验证

正在尝试使用Azure active directory实现SSO,并使用Azure/MSAL实现API身份验证,azure,azure-active-directory,single-sign-on,Azure,Azure Active Directory,Single Sign On,我正在尝试使用Azure Active Directory实现SSO,并使用Azure AD/MSAL实现API身份验证,但我面临下面描述的问题 身份验证后,将生成idToken,并将其保存在本地存储器中,并自动附加到API调用,该调用被视为未经授权,错误为“无效令牌”“访问群体无效”,因为ID令牌不能用于API身份验证 身份验证后,我调用acquireTokenSilent方法来获取访问令牌。我能够获取并设置令牌,但在API调用时,连接到授权头的令牌是ID令牌,而不是访问令牌如何配置Msali

我正在尝试使用Azure Active Directory实现SSO,并使用Azure AD/MSAL实现API身份验证,但我面临下面描述的问题

  • 身份验证后,将生成
    idToken
    ,并将其保存在本地存储器中,并自动附加到API调用,该调用被视为未经授权,错误为“无效令牌”“访问群体无效”,因为ID令牌不能用于API身份验证

  • 身份验证后,我调用
    acquireTokenSilent
    方法来获取访问令牌。我能够获取并设置令牌,但在API调用时,连接到授权头的令牌是ID令牌,而不是访问令牌如何配置
    Msalinterceptor
    将访问令牌附加到授权头而不是ID令牌?

  • 为了测试访问令牌,我使用了Postman并点击了API。再次,授权失败(Unauthorized 401),错误消息为“无效令牌”,“签名无效”。在jwt.io中,它还显示无效签名签名有什么问题?

  • 这是我的代码的快照:

    this.subscriptionLoginSuccess = this.broadcastService.subscribe("msal:loginSuccess", (payload) => {
    
          const accessTokenRequest = ["user.read", "api://[scope]"];
    
            this.msalAuthService.acquireTokenSilent(accessTokenRequest);
    }
    
    谢谢

    编辑:app.module.ts中的配置

    MsalModule.forRoot({
          clientID: 'clientID',
          authority: 'https://login.microsoftonline.com/tanentId',
          validateAuthority: true,
          redirectUri: 'https://localhost:5001/',
          cacheLocation: 'localStorage',
          storeAuthStateInCookie: isIE,
          postLogoutRedirectUri: 'https://localhost:5001/auth/login',
          navigateToLoginRequestUrl: true,
          popUp: false,
          consentScopes: ["api://WebApiClientId/api-access"],
          unprotectedResources: ['https://www.microsoft.com/en-us/'],
          protectedResourceMap: protectedResourceMap,      
          piiLoggingEnabled: true,
        }),
    
     providers: [
        {
          provide: HTTP_INTERCEPTORS,     
          useClass: MsalInterceptor,
          multi: true
        },
    

    您应该只使用一个API的作用域调用acquireTokenSilent。因此,如果您想调用API和MS Graph API,您将需要两个调用。是的,我只使用一个作用域。我不想使用ms graph api。只想访问自己的应用程序的API。同样在jwt.io中,我在令牌的头中看到nonce,它是否会导致无效签名?如果是,那么如何摆脱它?在您的示例代码中,您使用了来自不同API的两个作用域。好的,明白了,谢谢!,但是关于id令牌连接到API调用而不是访问令牌的第一个问题呢?有什么方法可以指导msalinterceptor吗?嗯,不确定。您是如何配置它的?