【问题标题】:Is it possible to authenticate from SPA with Microsoft Authentication Library but without Redirect Uri?是否可以使用 Microsoft 身份验证库从 SPA 进行身份验证但没有重定向 Uri?
【发布时间】:2020-03-17 02:44:50
【问题描述】:

我正在创建一个 Javascript 单页应用程序。它要求用户在隐式流程期间登录,以便稍后使用 Microsoft Graph API。 我正在使用 MSAL.js 并尝试从 this guide 调整 sn-ps 以从 authRedirectCallBack

获取身份验证令牌

我意识到在其他流程中 redirect uri(在身份验证后使用)对于获取令牌并继续进行是必不可少的。 但是在我的流程中,我在 Javascript 回调函数中处理了令牌。

是否可以避免在向 Azure AD 注册应用程序时和/或在代码执行期间提供 redirect uri?我根本不想将用户带到这个重定向 uri。

目前我的代码如下所示:

var msalConfig = {
  auth: {
    clientId: 'my-app-id',
  },
  cache: {
    cacheLocation: "localStorage",
    storeAuthStateInCookie: true,
    forceRefresh: false
  }
};
const loginRequest = {scopes: ['openid', 'profile', 'user.read']};
const msalClient = new Msal.UserAgentApplication(msalConfig);
msalClient.handleRedirectCallback(authRedirectCallBack);
singIn();

async function singIn() {
  try {
    msalClient.loginPopup(loginRequest).then(function (response) {
      if (msalClient.getAccount()) {
        console.log('logged');
      }
    });
  } catch (err) {
    console.log(err);
  }
}

function authRedirectCallBack(err, response) {
  if (err) {
    console.log(err);
  } else {
    if (response.tokenType === "access_token") {
      console.log('token', response);
    }
  }
}

【问题讨论】:

    标签: javascript oauth single-page-application msal


    【解决方案1】:

    需要重定向 URI,因为它是我们用来确保响应不会返回给未经授权方的主要安全机制,因为隐式流程依赖于将 iframe/popups/windows 重定向回您的应用程序,响应位于url 的哈希值。

    请注意,如果您使用 loginPopup/acquireTokenPopup/acquireTokenSilent,最终用户将不会真正“看到”此重定向页面,因为它只会在隐藏的 iframe(用于 acquireTokenSilent)或弹出窗口中短暂访问。一旦 MSAL.js 发现 iframe/popup 已重定向回您的应用程序,就会解析响应并关闭 popup/iframe。

    我们正在开发一个新版本的库,它将切换到带有 PKCE 的 Auth Code Flow,它不会使用隐藏的 iframe,但仍会使用弹出窗口/重定向。

    您能否进一步解释为什么您不希望您的用户访问重定向页面?

    【讨论】:

    • 感谢您的回答。就我而言,重定向 Uri 的主要问题是它必须是静态的(因为我需要使用 Azure AD 保存它)。但是,对我来说,重定向 uri 在某些情况下会有所不同(例如,新的子域)。这需要额外的代码复杂性,我认为这对于这个已经安全的设置是不必要的。
    • 我明白了。我知道必须在门户中注册大量重定向 URI 相关的工作可能会令人沮丧,但这是一个必要的权衡,以确保只有您的应用程序域能够为您的用户接收令牌。
    • 我了解安全问题。但是我不同意这应该是强制性的。注册重定向 url 是一个不错的安全选择。不多。很明显,为什么这对安全性贡献不大。重定向由浏览器控制,而不是由超级身份验证服务器控制。如果需要,现代浏览器提供了伪造重定向的官方方法。 chrome.identity.getRedirectURL 只是这个 strict 重定向 url 要求是多么容易绕道的一个例子。但我猜潜在的攻击不会依赖于浏览器。 HTTP(s) 协议足够灵活,可以模拟服务器无法验证的任何行为。恕我直言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    相关资源
    最近更新 更多