正在尝试使用Azure active directory实现SSO,并使用Azure/MSAL实现API身份验证
我正在尝试使用Azure Active Directory实现SSO,并使用Azure AD/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
idToken
,并将其保存在本地存储器中,并自动附加到API调用,该调用被视为未经授权,错误为“无效令牌”“访问群体无效”,因为ID令牌不能用于API身份验证acquireTokenSilent
方法来获取访问令牌。我能够获取并设置令牌,但在API调用时,连接到授权头的令牌是ID令牌,而不是访问令牌如何配置Msalinterceptor
将访问令牌附加到授权头而不是ID令牌?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吗?嗯,不确定。您是如何配置它的?