我开发的解决方案包括:授权服务器(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
所以,问题是:
谢谢你, 保罗
答案 0 :(得分:0)
在浏览器中运行的应用程序(Angular)无法保密,所以我会选择OAuth2 Implicit流程。隐式流程需要使用HTTPS与授权服务器进行通信,因为令牌是通过网络传输的。
您不应该从令牌端点中删除身份验证 - 它会危及其他流类型。例如,授权授权流程不要求客户端由HTTPS提供服务,并且任何人都可以看到授权代码,因此令牌端点密钥在那里很重要(资源服务器必须使用HTTPS请求令牌)。
使用隐式流程,您必须检查访问令牌的有效时间,并在当前访问令牌到期之前请求新的访问令牌。例如,使用prompt=none
auth请求参数。