带有 Auth0 的 Angular2,我需要隐藏我的 ClientID 和域吗?

Posted

技术标签:

【中文标题】带有 Auth0 的 Angular2,我需要隐藏我的 ClientID 和域吗?【英文标题】:Angular2 with Auth0, do I need to hide my ClientID and domain? 【发布时间】:2017-03-14 06:38:00 【问题描述】:

我一直在使用 Auth0 来构建我网站的前端用户身份验证部分,但我不确定我是否应该完全按照文档进行操作。

如果我想构建一个商业产品,我应该隐藏客户 ID 和域吗?这会导致安全漏洞吗?

目前任何人都可以查看我的 Angular2 源代码并查看客户端 ID 和域。

【问题讨论】:

【参考方案1】:

客户端标识符和您的域(我假设您指的是分配的 Auth0 域,类似于 [account].auth0.com都被视为不需要的信息保密

域代表处理身份验证的实体;相当于您的应用程序的accounts.google.com

客户端标识符在 OAuth 2.0 规范中定义,清楚地表明它不是机密信息:

客户端标识符不是秘密;它向资源所有者公开,不得单独用于客户端身份验证。

在实际代码位于客户端环境中的基于浏览器的应用程序或其他应用程序中,不可避免地会在其中存储用于身份验证的信息。您只需要确保存储的信息可以像您提供的两个示例一样被披露。

另一方面,这些类型的应用程序无法安全地使用 OAuth 2.0 定义的客户端密码,因为正如您所说,任何人都可以通过检查代码看到它。

【讨论】:

除非我有误解,否则我确实看到了这种潜在的危险。假设我是一名黑客,我可以使用从目标“获取”的 clientID 和域来构建一个看起来像目标站点的站点。用户认为他们正在登录该站点。经过身份验证后,我可以使用返回令牌来做各种坏事,因为它是我的客户端代码正在运行。我认为由于这种危险,您不希望任何人都可以使用您的 clientID 和域? 根据 OAuth2 规则,您需要指定接收令牌的重定向 URL;可用于与您尝试模拟的客户端 ID 相关联的重定向 URL 集在执行 OAuth 请求时已预先注册和验证。你的假客户端可以启动请求,但如果它指定了一个不受他控制的有效重定向 URL,那么它永远不会收到令牌,如果它试图在假客户端控制下指定一个重定向 URL,则请求将无法验证。 有道理。谢谢。

以上是关于带有 Auth0 的 Angular2,我需要隐藏我的 ClientID 和域吗?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 和 JWT 身份验证 (Auth0)

带有 auth0-lock 的 Auth0 仅在使用调试器时进行身份验证,以缓慢单步执行代码

如何在Angular2中显示和隐藏带有复选框元素的div?

PHP中的Auth0 JWT令牌验证

angular2 router.navigate 在 auth0 回调中

Auth0 Angular 2 sso 单点登录