我即将开始开发REST服务,安全性是该项目的一个重要方面,但我找不到关于如何实现它的一些确切信息。我的服务最初将由Android应用程序使用,但稍后可能会被其他平台使用。控制用户访问权限至关重要,因此Authorization
和Authentication
对REST服务的控制非常重要。
虽然我可以找到有关如何制作安全REST API的主题,例如here,here和这个重要的here,但令我惊讶的是,所有这些都失败了指向一个着名的标准或框架或经过时间考验的解决方案,这通常是保护软件应用程序的“方法”,我们避免尽可能 “推出自己的安全解决方案”。
到目前为止,在我的研究中,我认为OAUTH 2.0(甚至是OAUTH 1.0)是最好的方法,它是一种公共广泛使用的协议,支持Authorization
和Authentication
,我们可以控制生命周期密钥,甚至有一个特殊的refresh key
,允许客户端不存储密码信息,以便在需要时获取新的key
。
我还认为Apache Shiro
是java中Security
,Authorization
和Authentication
的最佳框架,所以当我找不到时,它会让我感到惊讶Shiro
和OAUTH 2.0
之间的任何整合......好吧one that's 5 years old,并没有激发我对我的信任。
更令人好奇的是,Apache Shiro PMC主席Les Hazlewood拥有(好吧,拥有,他只是把它卖给了Okta)Stormpath,一家为Identity
和User Management
制作的公司,所以我希望他能在OAUTH 2.0
和Shiro
之间提供一些简单的集成,除非这会过多地破坏Stormpath商业计划(我不相信,因为Apache基金会不会允许这种行为。)
所以最后的问题是:
Shiro
和OAUTH 2.0
之间是否有任何简单的集成,还是我必须编写自己的代码? OAUTH 2.0
解决方案来处理REST APIs
访问控制,或者我错过了什么?答案 0 :(得分:3)
我知道Buji project使用Shiro并支持Oauth2。我还没有使用它,但你可以查看它。
答案 1 :(得分:1)
你肯定不需要自己编码。有一些很棒的java库和应用程序可供oauth2使用,您可以从用于构建自己的oauth2服务器的低级库中选择一个功能齐全的独立openid连接服务器。
Spring security提供了oauth2,您可以使用oauth2在应用程序中嵌入oauth2服务器。 http://www.baeldung.com/rest-api-spring-oauth2-angularjs提供了一个教程。
有一个mitreid openid connect https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server,它有一个war覆盖,您可以使用它将用户和客户端管理应用添加到您的webapp中。
Keycloak(https://www.keycloak.org/)提供了一个功能齐全的独立openid连接服务器。