login.live.com
存在问题,导致无法使用身份提供商Microsoft帐户为Azure AD B2C获取MSAL.js访问令牌。
当iframe(msalRenewFrame…
)尝试在https://login.live.com/oauth20_authorize.srf
进行身份验证时,https://login.live.com/oauth20_authorize.srf
会尝试'framebust'(导航作为主要网站的iframe的父级)。 Chrome会显示此警告:
带URL的框架 'https://login.live.com/oauth20_authorize.srf?client_id= ...试图 使用URL导航其顶级窗口 'http://localhost:4200/#/dashboard'。浏览顶级窗口 来自跨域iframe将很快需要iframe 收到用户手势。看到 https://www.chromestatus.com/features/5851021045661696
DoSubmit @ oauth20_authorize ...
onload @ oauth20_authorize ...
这会导致主网站重定向,从而将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显示错误:
不安全的JavaScript尝试使用URL启动框架导航 带有网址的框架中的“http://localhost:4200/#/dashboard” 'https://login.live.com/oauth20_authorize.srf?client_id= ......框架 尝试导航顶层窗口是沙盒,但是 '允许顶部导航'的标志或 未设置“allow-top-navigation-by-user-activation”。
我认为这种框架风格是出于兼容性原因而发生的(我们都知道如何将重度登录重定向到Microsoft服务中)。我担心这不容易解决。但Chrome无论如何都会很快打破它,所以也许https://login.live.com/oauth20_authorize.srf
背后的团队已经在它上面了。在此之前,Azure AD B2C与Live Accounts和MSAL.js一起被破坏,无法使用。
我已将此发现发布在issue 267 of MSAL.js,但由于这不是MSAL.js问题,我也在此处发布。我希望微软客户团队的某个人看到它,并且可以提供更多信息。
这是我实例化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']})`);
}
}
这就是我尝试获取访问令牌的方式
public getAccessToken(): Observable<string> {
const that = this;
const acquireTokenPromise = this.clientApplication.acquireTokenSilent(environment.msalConfig.scopes);
return fromPromise(acquireTokenPromise);
}
范围是[ 'https://....onmicrosoft.com/.../user_impersonation' ]
答案 0 :(得分:0)
对于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身份验证。