在许多描述中,第一步是用户尝试访问服务器上的资源,例如
https://fhirblog.files.wordpress.com/2014/06/oauth2sequencediagram.png
现在我有了一个带有严重端点的 Rest API:
GET /server/resource1
DELETE /server/resource1/{uuid}
GET /server/resource2
...
实现看起来像这样:
@DELETE
public Response deleteResource(
@ApiParam(value = "The id", required=true)
@PathParam("uuid") String uuid,
@Context SecurityContext securityContext)
throws NotFoundException {
到目前为止,我已经实现了一个 apikey,它通过 header 传递到 api 中,以及一个验证 apikey 的过滤器。
现在我想实现一个完整的(三/两条腿)oauth 2.0 流程。但我现在想知道第一步。
所以问题是:
我是否必须在每个端点上添加一种机制来验证请求是否具有 token ?如果不将请求重定向到身份验证端点?
(另外 我可以在 HttpHeader 中发送 token 还是 token 必须位于请求正文中?)
或者: 我是否必须只创建一个端点来处理 token ,而在我的其他资源端点中我只验证 token 是否有效?
最佳答案
好的,这是解释,
我是否必须在每个端点上添加一种机制来验证请求是否具有 token ?如果不将请求重定向到身份验证端点?
这个问题有两个部分,所以我将分开解释以便更好地理解,
我是否必须在每个端点上添加一种机制来验证请求是否具有 token ?
是的,一般来说,端点是 API,因此您需要设置中间件或拦截器或过滤器,以检查此端点是否需要授权(如果需要)检查访问 token ,如果有效则继续请求,如果不返回401 Unauthorized 作为 Http 响应,例如:
所有对 /server/* 的请求都必须使用访问 token 进行访问,然后您需要为这些路径设置过滤器并检查访问 token ,
如果不将请求重定向到身份验证端点?
不,如果未提供访问 token 或无效或过期,在任何情况下,您都需要返回未经授权 http 响应,如下所示,
状态代码:401
{"ok":false,"errors":[{"code":"unauthorized_request","message":"未经授权的请求,访问 token 无效/已过期"}]}
这里是 json 响应,但任何格式都可以
因此,当客户端发出 http 请求来访问端点时,他们需要在 HTTP header 中传递访问 token ,如下所示,
Authorization: Bearer {access_token}
我是否必须只创建一个端点来处理 token ,而在我的其他资源端点中我只验证 token 是否有效?
是的,您需要创建一个像/auth这样的端点(通常称为Auth Endpoints)来处理身份验证过程、代码交换、刷新、撤销等。
然后所有其他资源端点应该只检查 token 并处理请求,并且这些端点不会参与 token 管理过程
关于java - OAuth 2.0 - 第一步细节,有人可以澄清吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38762112/