【问题标题】:OAuth 2.0 Authentication Server with multiple Resource Servers具有多个资源服务器的 OAuth 2.0 身份验证服务器
【发布时间】:2015-04-15 02:05:03
【问题描述】:

我正在尝试在我们的 API 中实现 oauth2 而不是基本身份验证。

我已经构建了一个身份验证服务器并实现了一个访问令牌 API #1 和 API Server #2 中的验证。

所以我的问题是,oauth2 如何与多个 API 一起工作?

目前我可以使用单个 access_token 访问所有 API,但我想这不应该是……,还是我误解了什么?

而且我不确定 scopes 参数,这更多的是一种权限,并没有指定应该向哪个 api 发出访问令牌。

【问题讨论】:

    标签: oauth oauth-2.0


    【解决方案1】:

    假设您使用单个授权服务器,范围概念允许您处理此问题:您可以为每个 API 定义一个范围,并让客户端请求一个或两个范围。颁发与多个范围(即您的情况下的 API)相关联的访问令牌是完全有效且实用的 OAuth 2.0。

    访问令牌是针对每个客户端发布的,因此向同一个客户端分发不同的访问令牌不会给您带来任何安全优势,除非这两个 API 由不同的实体控制。在任何情况下,客户端都必须改变它请求它们的方式,这将再次使用范围来完成。

    【讨论】:

    • 这正是我正在寻找的答案。所以基本上我必须在授权服务器上定义哪个 client_id 可以访问哪些范围?如果我将在授权服务器上定义它,为什么客户端会请求特定范围(使用范围参数)?我知道哪个访问令牌是从哪个 client_id 发出的,并且在 api 中的令牌验证期间,我将能够检查是否允许客户端访问名为 api1.example.com 的范围 xy。
    • 如果它适用于您,那没关系,但可能不满足最终用户向这些客户端授予权限的场景,或者如果客户端不需要所有可能的权限(例如临时或由于客户端更改)
    • 但是我应该如何保护不同客户端的 access_token 呢?如果有人设法通过他的服务从另一个用户那里获得了 access_token (@see homakov.blogspot.ch/2012/08/…),那么 access_token 应该只对颁发 access_token 的资源服务器有效。我的资源服务器 (API #1) 在每个请求期间都会验证 access_token,但它也接受为颁发的令牌
    • grml 5 分钟后无法编辑我上面的评论^^。再次在这里:但是我应该如何保护不同客户端的 access_token?如果有人设法通过他的服务从另一个用户那里获得了 access_token (@see homakov.blogspot.ch/2012/08/…),那么 access_token 应该只对颁发 access_token 的资源服务器有效。我不确定是否可以使用范围解决此问题。文章明确表示没有任何解决方案。 (而且我只使用隐式授权)
    • 添加与访问令牌关联的 client_idaud(即资源服务器标识符)声明可以缓解这种情况,以便资源服务器可以执行必要的检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    相关资源
    最近更新 更多