Angular与Azure AD B2C受众验证失败

时间:2018-04-30 16:32:41

标签: asp.net-core angular5 azure-ad-b2c

我有一个Anuglar5 spa前端和ASP.NET Core API。两者均由Azure AD B2C服务保护。角度应用程序正确地重定向到登录页面并且登录返回令牌。当我尝试用我得到的令牌调用API时;

AuthenticationFailed: IDX10214: Audience validation failed. Audiences: '627684f5-5011-475a-9cbd-55fcdcdf369e'. Did not match: validationParameters.ValidAudience: 'ee8b98a0-ae7a-38b2-9e73-d175df22ef4c' or validationParameters.ValidAudiences: 'null'.

" 627684f5-5011-475a-9cbd-55fcdcdf369e"是前端应用程序的应用程序ID。并且" ee8b98a0-ae7a-38b2-9e73-d175df22ef4c"是API的应用程序ID。

我的代码;

`export class MSALService {

private applicationConfig: any = {
    clientID: '627684f5-5011-475a-9cbd-55fcdcdf369e',
    authority: 'https://login.microsoftonline.com/tfp/mytenant.onmicrosoft.com/B2C_1_my_signin_signup',
    b2cScopes: ['https://meeblitenant.onmicrosoft.com/api/myapp_read', 'https://meeblitenant.onmicrosoft.com/api/myapp_write'],
    redirectUrl: 'http://localhost:4200/'
};

private app: any;
public user: any;

constructor() {

    this.app = new UserAgentApplication(this.applicationConfig.clientID, this.applicationConfig.authority,
        (errorDesc, token, error, tokenType) => {
           console.log(token);
        },
        { redirectUri: this.applicationConfig.redirectUrl }
    );
}

public login() {

    let tokenData = '';
    this.app.loginRedirect(this.applicationConfig.b2cScopes).then(data => { tokenData = data; });
}

public getUser() {

    const user = this.app.getUser();

    if (user) {

        return user;
    } else {

        return null;
    }
}

public logout() {

    this.app.logout();
}

public getToken() {

    return this.app.acquireTokenSilent(this.applicationConfig.b2cScopes)
        .then(accessToken => {
            console.log(accessToken);
            return accessToken;
        }, error => {
            return this.app.acquireTokenPopup(this.applicationConfig.b2cScopes)
                .then(accessToken => {
                    return accessToken;
                }, err => {
                    console.error(err);
                });
        }
    );
}

}`

使用Postman中返回的令牌也会返回相同的错误。我的理论是,我用来调用Azure AD B2C的URL是问题,但通过文档查看我找不到问题。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

Kinda听起来就像您将Id令牌(而不是访问令牌)发送到API(用于您的前端)一样。您可以通过解码从https://jwt.ms获得的令牌来进一步调试问题。

aud(受众群体)应该与您的API的ID相匹配,并且您要求的范围也应与之匹配。