我正在构建一个Angular SPA应用程序,并计划通过公共GitHub存储库开源。该应用将利用 Azure AD B2C 进行身份验证。如果我共享 B2C 数据点(客户端 ID、租户、作用域、策略名称),我面临哪些风险?将这些配置选项包含在代码中是否是一种可接受的安全实践,或者我应该将这些值移动到另一种存储机制并从源代码中移出?
我自己考虑,最大的风险似乎是其他人可以克隆应用程序并在本地(即他们自己的机器)针对我的 B2C 实例运行它。不确定这是否真的是一件大事 - 也许这是一个好处,因为这是一个开源应用程序。
None,假设你的应用将托管在互联网上。 无论如何,这些信息都将公开,因为 Angular 代码需要知道这些值才能将用户正确发送到 B2C(通过重定向或弹出窗口)。
将这些配置选项包含在代码中是否是一种可接受的安全实践,或者我应该将这些值移动到另一种存储机制并从源代码中移出?
即使您将这些值移出 Angular 代码,您也必须进行 rest 调用才能获取此信息,因此会公开它。
此外,当用户在 B2C 站点上时,所有信息都在 URL 中。
。最大的风险似乎是其他人可以克隆该应用程序并针对我的 B2C 实例在本地(即他们自己的机器)运行它......
不太可能,因为回复 URL会阻止这种情况*。这是你提到的价值观被暴露的关键。
从 Azure 门户:
重定向 URI 必须全部属于同一域
由于可以在 Azure 门户中控制回复 URL 的设置,因此可以防止恶意站点造成伤害。
有一个例外;您可以具有本地主机和单个域的值。
- https://localhost:44300
- https://jwt.ms
不幸的是,没有一个使用 B2C 的 SPA 演示的良好官方示例,但我们仍然可以查看 WingTip Games 演示(它使用身份验证代码流,而不是隐式流)
请参阅此登录链接。 我们可以在 URL 中看到以下内容
- 然后租户在网址(b2ctechready)中:https://login.microsoftonline.com/b2ctechready.onmicrosoft.com/oauth2/v2.0/authorize
- p=b2c_1a_sign_up_sign_in_games(这是 B2C 策略)
- client_id=F327751F-477C-4DF8-A174-F59786d99d9f
- redirect_uri=https%3A%2F%2Fwingtipgamesb2c.azurewebsites.net%2Fb2c_1a_sign_up_sign_in_games-callback
- response_type=代码%20id_token%20令牌
- scope=openid%20profile%20https%3A%2F%2Fb2ctechready.onmicrosoft.com%2Fwingtipb2c%2FBilling.Read%20https%3A%2F%2Fb2ctechready.onmicrosoft.com%2Fwingtipb2c%2FMusic.Read
- response_mode=form_post
- nonce=636594241776916748.Y2FmOGUxYmEtZWQ4ZS00YjAxLWJkZDQtNTMwOGNjMGRhNGI0ZGE0YjU4YjItZDljNS00MDcwLWJhMTgtMmIzMjdhY2MwZjZk
- client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
- client_assertion=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ey...
我认为这并不比您发布 Angular 客户端和查看页面源代码的其他人风险更大。
话虽如此,我相信如果在已发布的源代码中插入占位符,这样开发人员就可以用自己的值替换它们,这将是一种更好的开发人员体验。