在阅读了关于Oauth2
协议的最后两天后,我仍然需要一些帮助来确定我们为我们部署Authorization Service
的系统使用的最佳资助。
该应用使用Spring Cloud, Spring Boot and Spring Security
。它有service discovery
使用Eureka
,所有用户的请求都通过API gateway
来访问内部网络中的不同微服务。包括网关在内的所有这些微服务都使用Zuul
代理。 Authorization Service
将是另一个将用户存储在自己的数据库中的微服务。目前有一个前端部署在网关中,并在Angular 4
中开发。没有任何外部应用程序向我们的系统发出请求,并且会有一大堆用户使用一小部分可能的角色来使用它,并且必须使用用户名和密码登录。
在这种情况下,我们应该选择Authentication Code grant
还是Password grant
可以吗?或者根本不是Oauth2
?我看过和阅读过的所有使用Authentication Code grant
的例子都要求用户允许客户端在登录后访问资源。在我们的例子中,客户端将是网关,因此用户不应该'必须给它任何东西。 Password grant
似乎删除了这种情况,因为用户的凭据用于告诉Authorization Service
提供令牌。我错过了什么吗?
除此之外,Authorization Services
的示例包括Facebook
或Google
。使用这些时,一旦用户在登录后授予客户端应用程序访问资源的权限,后续请求就不会显示此屏幕,只需要使用其凭据登录。这种访问授权信息存储在何处? Facebook
如何知道,一旦用户授予对应用程序的资源访问权限,下次登录时他不需要再次执行此操作?
答案 0 :(得分:1)
根据我的理解,密码授予的一个基本目的是为存储和收集用户名和密码的应用程序提供OAuth2的无缝迁移路径。而且有很多这些。
同样如此nice article:
因为这显然要求应用程序收集用户的 密码,只能由服务本身创建的应用程序使用。 例如,本机Twitter应用程序可以使用此授权类型进行记录 在移动或桌面应用程序中。
在您使用OAuth2的情况下,密码授予对我来说仍然有意义。这主要是因为您的技术堆栈中有很多可以使用的OAuth2基础架构(我的意思是Spring OAuth2)。这种基础设施可以无缝地融入微服务架构中,这将是将所有事物连接在一起的最简单,最快捷的方式。但理想情况下,Web应用程序应使用身份验证代码授权,您应该将用户重定向到他们进行身份验证的特殊位置(例如,Zuul网关可能会将用户重定向到AS提供的页面)。这有点复杂,如果您不打算连接其他应用程序,您可能会获得密码授予。
关于你的第二个问题 - FB,谷歌,LinkedIn - 他们记得授权的应用程序。例如在Facebook中 - 导航至Settings - Apps
并查看哪些应用有权访问您的数据:
在LinkedIn中 - 导航至Account - Parnters and Third parties - Permitted Services
。例如。此设置允许访问HackerRank的用户数据:
如果您删除这些应用,则系统会要求您再次授权这些应用。