我对OAuth2.0的理解是它定义了一个授权协议,其中服务器AUTHORIZATION_SERVER管理授权第三方客户端应用程序CLIENT访问服务器所拥有的资源RESOURCE_SERVER所需的工作流程。用户,RESOURCE_OWNER。
这取自OAuth规范https://tools.ietf.org/html/draft-ietf-oauth-v2-17:
OAuth 2.0授权协议支持第三方应用程序 代表a获得对HTTP服务的有限访问权限 资源所有者通过协调之间的批准交互 资源所有者和HTTP服务,或允许第三方 申请以自己的名义获取访问权。
授权流程本身很清晰,并且有很多关于如何实施OAuth的示例(例如某些应用程序获得部分访问Facebook用户的帐户)。
现在,我尝试为少数应用程序实现授权服务器,其中我的流程比OAuth指定的更简单(不涉及第三方应用程序):
用户尝试访问APP。
APP对用户进行身份验证(超出此问题的范围)。
APP根据AUTHORIZATION_SERVER授权用户。
在做了一些搜索之后,我发现有几个应用程序似乎在非常相似的用例中使用OAuth。
以下是我的问题:
请注意,在示例中,APP扮演两个OAuth角色:CLIENT和RESOURCE_SERVER。在OAuth中,CLIENT永远不应该直接访问资源。相反,它是RESOURCE_SERVER,它在通过AUTHORIZATION_SERVER成功授权用户RESOURCE_OWNDER的行为后,为CLIENT检索资源。
换句话说,这个APP的CLIENT / RESOURCE_SERVER双重角色是否可以接受?除了管理在这种情况下不存在的额外角色所需的额外复杂性之外,它是否会引入任何其他后果?
您是否建议其他候选人?
背景:我的所有应用程序都是基于Java的,我需要的授权策略应该是混合的(基于角色/权限和基于策略)。
答案 0 :(得分:1)
您最好查询(本地)LDAP服务器或数据库以获取所需的授权信息类型。 OAuth专门用于避免让应用对用户进行身份验证。
答案 1 :(得分:0)
根据我的理解Oauth2:您有第三方应用程序要求用户允许她以他的名义向应用程序询问数据。这里的第三方应用程序可以是网页,移动应用程序等。
OAuth2与OAuth类似,但使用SSL代替其他加密解决方案的安全协议,请参阅此response:是的,如果您使应用程序与OAuth一起使用,那么它应该与OAuth2一起使用。
不要自己实现OAuth2 protocole,而是使用现有的lib:更可靠,更新等。
在单独的服务器上启动此OAuth2代码:更容易从应用程序代码中单独替换/更新
编辑:我给你的response还有一些很好的图表可以帮助你理解:)
EDIT2:为OAuth2和您的应用程序使用单独服务器的另一个原因是,如果有一天您有多个数据源(多个API),但突然您不需要第一个,即放置OAuth代码的那个, 你是做什么 ?如果将OAuth2路由放在不同的服务器上,它们会更好,更可靠。