Azure AD / MSAL.js - 是否安全包含租户ID?

4

msal.js的实现中包含clientIdtenantId是否安全?我相信我已经阅读了Joonas Westlin的文章,他说嵌入ClientId是可以的(但我现在找不到那篇文章了)。

库中有它的位置,因此似乎是可以的:

this.msal = new UserAgentApplication(
                {
                    auth: {
                        clientId: this.clientId,
                        authority: `https://login.microsoftonline.com/${this.tenantId}`,
                        redirectUri: Uri + "/login",
                    },

然而,人们会认为这样的身份信息应该保密。
1个回答

7
简短回答:是的,包含clientIdtenantId是安全的。
你的担忧是合理的,因为使用JavaScript应用程序(如单页应用程序)时,您放置的任何信息都可能暴露给用户并被误用。虽然tenantIdclientId不属于这类信息,但client secretkeys则是敏感信息,需要避免。 tenantId作为租户的OpenID发现文档的一部分已经公开可用。您可以使用以下格式的URL访问它:
https://login.microsoftonline.com/{tenantID or tenantDomain}/v2.0/.well-known/openid-configuration

clientId是您的应用程序注册的标识符。针对您关于是否包含它的疑虑...仅有clientId并不能建立应用程序的身份,你还需要与之配套的client secret,才能使用应用程序的身份。

因此,从安全角度来看,任何公共客户端应用程序(如基于JavaScript的SPA甚至桌面本地应用程序)都不应该使用客户端密码,因为这些应用程序无法安全地保留它并可能会被攻击。机密客户端(如基于服务器的Web应用程序或后端守护进程)才能处理密码。

这里是微软针对隐式授权流程提供的指南,这通常是JavaScript/SPA应用程序使用的流程 - Microsoft Identity Platform和隐式授权流程

以下是一个类似的Stack Overflow帖子,涉及clientidtenantId的详细解释 - Azure Client ID、Tenant和Key Vault URI是否被视为密码?

我无法快速找到您在问题中提到的Joonas Westlin的帖子,但Joonas关于clientId的建议通常是正确的。


1
谢谢@Rohit。你似乎有很多与Azure和Azure AD相关的活动。 - HankCa
@HankCa 不客气!是的,我现在正在与他们密切合作 :) - Rohit Saigal
很好。你看到我其他的AAD问题了吗 - https://stackoverflow.com/questions/56698377/passport-azure-ad-msal-js-and-dynamic-scopes ? :) - HankCa
再加上 msal.js 无法将身份验证状态存储在仅限 HTTP 的 cookie 中,这是有意设计的!此外,这是 Joonas 的答案:https://stackoverflow.com/a/61614117/532675 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接