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.aspmsalRenewFrame…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/

10-13 07:08