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

标签 java rest oauth-2.0 swagger

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

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/

相关文章:

java - 解释琐事 : How many live collections are in a typical heap?

java - 与 Jackson 在 Jersey 中使用强类型进行 Hibernate 验证

REST API : How to ensure atomicity?

javascript - 通过 Google Spreadsheet API 导入 JSON

java - 如何为 Paint.setTextSize() 设置单位

java - 如何简洁地创建一个以原始值开头而不使用空双引号的字符串?

javascript - REST API - Vanilla JavaScript/AJAX 中的 POST 方法 - 错误 400(错误请求)

javascript - Admin-On-REST 自定义 REST 客户端编译失败

oauth-2.0 - Google OAuth 2 授权 - 为 token 交换代码

spring-security - 找不到名称为 'tokenStore' 的 bean 的类 [org.springframework.security.oauth2.provider.token.InMemoryTokenStore]