如何在OAuth2中保护ClientID?

时间:2016-10-23 11:25:37

标签: angularjs authentication angular oauth2 identityserver4

我们希望使用外部OAuth2服务器(IdentityServer4)开发Angular 2应用程序。

我们还想确定每个客户的唯一性。但是如何保护Angular 2 / Javascript源中的ClientID? 我们是否必须在这里使用CORS并检查请求的来源?我们是否必须为身份验证构建服务器端应用程序?

我们的移动应用程序应使用ClientID 12345 我们的Angular App应该使用ClientID 99999

但如果其他人试图使用ClientID 12345,则应该拒绝。

这里的最佳做法是什么? - 直接使用Angular进行身份验证? - 使用每个角度应用程序a Serverapp for Auth?

2 个答案:

答案 0 :(得分:1)

您无法对公共客户端进行身份验证 - 没有安全的方法可以执行此操作。

特别是对于基于浏览器的客户端,您只能使用公共返回URL的所有权来标识客户端。

这是不可能的 - 而OAuth2并没有改变这种情况。

答案 1 :(得分:0)

OAuth2使用一对重要的键。

ClientID和ClientSecret都用于标识一个应用。 ClientID可以是公开的,它需要保留的秘密,好吧,秘密:)。

由于您的代码将是客户端,因此存在问题。我很确定OAuth2实现只适用于客户端。诚实地说,我并不相信它的安全性,因为无论你做什么,你做客户端的一切都是可见的。

我在这种情况下所做的是有一个小后端,这是客户端应用程序和OAuth2服务器之间的额外层。它可能是一个非常简单的MVC或非常简单的WebApi2,它只会提供前端使用的端点,但它的主要职责是从前端接听电话,添加密钥并创建OAuth2调用以供使用由实际的资源服务器。这样你的密钥永远不会存储在前端,你可以使用任何你想要的机制来保证它们在后端的安全。

只需让您始终在身份验证标题中传递这些内容,并始终通过 https 连接使用身份验证/资源服务器。