我使用 msal.js 允许用户使用他们的 AAD 帐户登录。我在 https://apps.dev.microsoft.com/ 中创建了应用程序使用目标租户中的帐户。我的印象是,这样做也会在该租户下创建应用程序,并且 msal.js 会正常工作。但是,当 loginRedirect()
被调用时,我最终到达/common/端点,并且我被允许使用各种组织和个人帐户登录。
通过像这样指定权限,我能够重定向到正确的登录 url:
new Msal.UserAgentApplication({client_id}, 'https://login.microsoftonline.com/{tenant_id}/', () => {});
但是,这仍然不限制仅使用来自该组织的帐户登录。其实我也可以用个人账号登录。
我读自Is there a way to find whether authentication followed MSA or Azure AD in MSAL.js和 https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-tokens我可以使用解码后的 id_token
的 iss
属性的 Guid 部分来确定用户是使用 MSA 还是 AAD 登录的。但是,这始终返回相同的值,即 https://sts.windows.net/{tenant_id}/
无论我是使用 MSA 还是其他帐户登录。
我的问题是如何强制仅使用来自同一租户的用户帐户登录,如果我不能这样做,我如何至少获取一个值来检查用户是使用 MSA 还是帐户登录来自同一个租户?
最佳答案
您可以在权限中指定 organizations
而不是 common
以仅允许 AAD 帐户:
https://login.microsoftonline.com/organizations
如果您只需要 Microsoft 帐户,则可以使用 consumers
。
要允许所有,请使用 common
。
当您在新的 v2 门户中创建应用程序时,默认情况下该应用程序将是 Multi-Tenancy 的,您不会在您的目录中找到它。
如果您想要单租户应用,请使用 v1。
关于javascript - Azure AD V2/msal.js 限制个人账户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47323852/