login.live.com
出现问题,该问题阻止了使用身份提供者Microsoft帐户使用MSAL.js为Azure AD B2C获取访问 token 。
当iframe(msalRenewFrame…
)尝试通过https://login.live.com/oauth20_authorize.srf
进行身份验证时,https://login.live.com/oauth20_authorize.srf
尝试进行“framebust”(导航作为主要站点的iframe的父级)。 Chrome显示以下警告:
这将导致主站点重定向,从而将acquireTokenSilent
转换为acquireTokenBoisterous
。只是在开玩笑。
我尝试根据https://www.w3schools.com/tags/att_iframe_sandbox.asp将msalRenewFrame…
与ifr.setAttribute("sandbox", "allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts")
沙盒化。现在,主站点没有重定向,但现在Chrome显示错误:
我认为这种框架爆炸是出于兼容性原因而发生的(我们都知道如何将大量登录重定向到Microsoft服务中)。恐怕这并非易事。但是Chrome很快就会破解它,因此https://login.live.com/oauth20_authorize.srf
背后的团队可能已经在使用它了。在此之前,Azure AD B2C与真实帐户和MSAL.js的组合已损坏,无法使用。
我已经将这个发现发布在issue 267 of MSAL.js上,但是由于这不是MSAL.js问题,因此我也将其发布在这里。我希望Microsoft客户团队的成员能够看到它,并且可以提供更多信息。
这就是我实例化MSAL的方式:
public initAndHandleRedirects() {
const authority = `https://login.microsoftonline.com/tfp/${environment.msalConfig.tenant}/${environment.msalConfig.signUpSignInPolicy}`;
this.clientApplication = new UserAgentApplication(environment.msalConfig.clientId, authority,
function (errorDesc, token, error, tokenType) {
if (error) {
console.error(error);
} else {
console.warn(`got new ${tokenType} token: ${token}`);
}
},
{
navigateToLoginRequestUrl: false,
redirectUri: environment.msalConfig.redirectUri,
logger: new Logger(this.log)
}
);
if (this.authenticated) {
console.warn(`User: ${this.idToken['extension_Nickname']} (${this.idToken['sub']})`);
}
}
这就是我尝试获取访问 token 的方法
public getAccessToken(): Observable<string> {
const that = this;
const acquireTokenPromise = this.clientApplication.acquireTokenSilent(environment.msalConfig.scopes);
return fromPromise(acquireTokenPromise);
}
范围是
[ 'https://....onmicrosoft.com/.../user_impersonation' ]
最佳答案
对于B2C中定义的范围,您可以从 B2C标记request access标记。
例子:https://login.microsoftonline.com/<tenantName>.onmicrosoft.com/oauth2/v2.0/authorize?p=<yourPolicyId>&client_id=<appID_of_your_client_application>&nonce=anyRandomValue&redirect_uri=<redirect_uri_of_your_client_application>&scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fnotes%2Fread&response_type=code
您无法向身份提供者请求访问( IDP )进行B2C身份验证。
关于oauth-2.0 - MSAL.js使用Microsoft帐户(login.live.com)在Azure AD B2C上获取TokenSilent,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49831045/