OAuth2密码授予和基本身份验证

时间:2017-04-21 07:05:15

标签: authentication spring-security oauth-2.0

我开发的解决方案包括:授权服务器(AS),资源服务器和两个客户端。这两个客户端是:带有Angular 2的Web应用程序和带有Angular 2 + Ionic 2的移动应用程序。我已经开始根据此示例开发Authorization Server https://github.com/Baeldung/spring-security-oauth

对于这两个客户,我决定使用"密码代码授予"因为AS信任客户端。

但是现在我在存储"客户端密码"在应用程序上。因为API(... / oauth / token)是通过基本身份验证保护的,所以每当我向AS请求令牌时,我都需要发送类似的内容:

curl.exe -v -u client_id:client_secret http://localhost:8080/backend/oauth/token -d grant_type=password -d client_id=client_id -d username=admin -d password=admin

所以,问题是:

  1. 我可以在应用程序上安全地存储客户密码吗?
  2. 从oauth API中删除基本身份验证是否安全?
  3. 我是否使用其他代码授予类型?
  4. 谢谢你, 保罗

1 个答案:

答案 0 :(得分:0)

在浏览器中运行的应用程序(Angular)无法保密,所以我会选择OAuth2 Implicit流程。隐式流程需要使用HTTPS与授权服务器进行通信,因为令牌是通过网络传输的。

您不应该从令牌端点中删除身份验证 - 它会危及其他流类型。例如,授权授权流程不要求客户端由HTTPS提供服务,并且任何人都可以看到授权代码,因此令牌端点密钥在那里很重要(资源服务器必须使用HTTPS请求令牌)。

使用隐式流程,您必须检查访问令牌的有效时间,并在当前访问令牌到期之前请求新的访问令牌。例如,使用prompt=none auth请求参数。