在许多描述中,第一步是用户尝试访问服务器上的资源,如
https://fhirblog.files.wordpress.com/2014/06/oauth2sequencediagram.png
现在我有一个带有severel端点的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,它通过标头传递到api和一个验证teh apikey的过滤器。
现在我想实现一个完整的(三/两脚)oauth 2.0流程。但我现在想知道第一步。
所以问题是:
我是否必须在每个端点上添加一个机制来验证请求是否具有令牌?如果没有将请求重定向到auth端点?
(也 我可以在HttpHeader中发送令牌,还是令牌必须在请求正文中?)
或者: 我是否必须只创建执行令牌内容的一个端点,而在我的其他资源端点中,我只验证令牌是否有效?
答案 0 :(得分:1)
好的,这里有解释,
我是否必须在每个端点上添加一个机制来验证请求是否有令牌?如果没有将请求重定向到auth端点?
这个问题有两个部分,所以我将分别解释它以便更好地理解,
我是否必须在每个端点上添加一个机制来验证请求是否有令牌?
是的,一般来说端点是一个API,所以你需要设置中间件或拦截器或过滤器,以检查这个端点是否需要授权,如果这样检查访问令牌,如果有效则继续请求,如果不返回 401 Unauthorized 作为Http响应,例如:
必须使用访问令牌访问对 / server / * 的所有请求,然后您需要为这些路径设置过滤器并检查访问令牌,
如果没有将请求重定向到auth端点?
不,如果访问令牌未提供或无效或过期任何情况,您需要返回未经授权 http响应,如下所示,
状态代码:401
{“ok”:false,“errors”:[{“code”:“unauthorized_request”,“message”:“unuthroroized request,access token invalid / expired”}}}
这里是json响应,但任何格式都有效
因此,当客户端发出http请求来访问端点时,他们需要在HTTP Header中传递访问令牌,如下所示,
Authorization: Bearer {access_token}
我是否只需创建一个执行令牌内容的端点,而在我的其他资源端点中,我只验证令牌是否有效?
是的,您需要创建一个端点,如 / auth (通常称为Auth端点)来处理身份验证过程,代码交换,刷新,撤销等。
然后所有其他资源端点应该只检查令牌并处理请求,这些端点不会参与令牌管理过程