【问题标题】:Managing Application Access with OpenID Connect and OAuth使用 OpenID Connect 和 OAuth 管理应用程序访问
【发布时间】:2019-05-10 06:15:03
【问题描述】:

查看 OpenID Connect 和 OAuth 规范,似乎 OpenID Connect 是关于身份的,而 OAuth 是关于委托访问(尽管它似乎是专门的 API 访问)。

如果 OAuth 用于 API 访问,管理客户端访问的推荐方法是什么? OpenID Connect 可以说明您是谁,但可以说明您可以访问哪些客户端(应用程序)。

这是应用程序本身的工作还是我们可以放在访问令牌上的东西?

【问题讨论】:

    标签: oauth-2.0 openid identity openid-connect


    【解决方案1】:

    我不确定你到底想知道什么,所以我会尝试更广泛地回答。

    假设您有一个身份验证 (OAuth2) 提供程序、多个使用它的应用程序(客户端)和多个用户。

    如果客户端获得 ID 令牌,则该令牌应该仅用于请求它的客户端验证用户身份 - ID 令牌包含 aud(受众)字段和客户端的 client_id。

    如果客户端获得资源所有者授权的访问令牌,则客户端可以使用访问令牌访问任何接受授权提供者颁发的令牌的资源(API 服务)。但 API 服务会检查访问令牌是否包含服务所需的范围。如果客户端请求资源所有者无法委托的范围(没有足够的权限),身份验证提供者可以return error invalid_scope 或者只是从访问令牌中省略范围。客户端是否可以委托范围取决于身份验证提供程序的实现(OAuth2 RFC 没有涵盖它)。

    如果您想限制某些用户/客户端组合,使用户无法授权客户端获取令牌,那么这又是您的身份验证提供程序的实现细节。

    如果您的问题更多是关于允许经过身份验证的用户在具有其 ID 令牌(或访问令牌)的应用程序中执行的操作,那么由您决定如何执行此操作。应用程序通常需要限制对服务和数据的访问。服务通常是静态的,访问可以基于访问令牌范围。但应用程序数据是动态的,访问通常基于数据所有权或访问控制列表(ACL - 类似于文件系统)。

    【讨论】:

    • 更明确地说,我说的是客户端访问。根本不涉及 API。用户导航到客户端,客户端将他们重定向到令牌服务,然后将 ID 令牌发送回客户端。在允许用户进入客户端之前,我想阻止他们,因为他们无权访问该应用程序。我认为应用程序本身可以调用来检查这个,或者可以在 ID 或访问令牌中进行。
    • 这就是我在第 5 段中介绍的内容 - 您可以在身份验证提供者级别执行此操作 - 如果您决定客户端无法获取经过身份验证的用户的 ID 令牌,您只需将用户重定向回客户端error=access_denied.
    猜你喜欢
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2020-05-28
    • 1970-01-01
    • 2016-03-26
    相关资源
    最近更新 更多