我有一个需要通过OAuth 2.0进行身份验证的API。我最初预计会使用HWIOAuthBundle,但是从调查来看,这更多地与将第三方连接到Symfony的安全/身份验证机制有关,并且没有提供验证OAuth 2.0 Authorization
标头所需的机制
然后,我找到了一些有关FOSOAuthServerBundle的信息,这些信息使应用程序成为自己的OAuth 2.0提供程序,并提供了验证Authorization
标头所需的安全机制。
但问题是,我希望将OAuth 2.0提供程序(授权服务器)集成到外部应用程序(包含用户群)中,而不是将其包含在API中。这将提供一些机制,通过(另一个)RESTful API对此外部应用程序执行令牌验证。
点数:
我觉得我应该使用Implicit授权并在每个请求上调用授权服务器来验证令牌是否正确。
我的想法是否正确?
答案 0 :(得分:5)
根据我的要求,您需要通过外部OAuth授权服务器验证您的API:
客户需要提供在上述步骤中检索到的访问令牌 以及访问受保护资源的请求。访问令牌 将作为授权参数发送到请求标头中。
服务器将根据令牌验证请求。
如果令牌有效,则客户端将获得对受保护资源的访问权,否则将拒绝访问。
这是一个example,它可以帮助您实现您的要求。请检查此document。
或者简单地说,您可以使用Jersey and Oauth
此外,您可以查看Apache Oltu并找出达到要求的方式。
答案 1 :(得分:3)
Google,Facebook等许多大公司都有一个独立的API服务器授权服务器。查看Google
下面的Google OAuth授权流程您还可以查看Google的OAuth Documentation了解详细信息。
因此,您需要做的就是实施OAuth提供程序,以便您可以针对该提供程序进行授权。 OAuth网站上提供了一系列库:http://oauth.net/code。你可以专门看here;有一个用Java运行OAuth服务提供程序的示例。
答案 2 :(得分:2)
oAuth绝对可以是除应用程序服务器之外的服务器。下面是验证序列的图片:
- 显然,如果论坛无法解码或验证令牌,论坛将返回401状态代码而不是200状态代码。
只要您的oAuth服务器&论坛共享相同的公钥,你可以分割你的oAuth服务器&你的申请。
事实上,请看jwt.io。将从oAuth服务器获取的令牌粘贴到那里。它应该能够立即解码令牌。然后,您可以将公钥放入“秘密”文本框以验证令牌是否已经过验证。
您的应用程序(论坛,在此示例中)应该能够执行相同的操作:
1)从请求的Authorization标头中获取令牌
2)解码令牌
3)检查过期日期
4)使用oAuth的公钥验证令牌
5)返回成功的状态代码或失败状态代码