OAuth 2.0 - 第一步细节,有人可以澄清吗?

时间:2016-08-04 08:22:41

标签: java rest oauth-2.0 swagger

在许多描述中,第一步是用户尝试访问服务器上的资源,如

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中发送令牌,还是令牌必须在请求正文中?)

或者: 我是否必须只创建执行令牌内容的一个端点,而在我的其他资源端点中,我只验证令牌是否有效?

1 个答案:

答案 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端点)来处理身份验证过程,代码交换,刷新,撤销等。

然后所有其他资源端点应该只检查令牌并处理请求,这些端点不会参与令牌管理过程