【问题标题】:WSO2 Api Manager OAuth2 DCR security in public native mobile app公共原生移动应用程序中的 WSO2 Api Manager OAuth2 DCR 安全性
【发布时间】:2018-05-30 09:56:59
【问题描述】:

我正在为 iOS 和 Android 设计公共原生移动应用程序的安全性,该应用程序使用 WSO2 Api Manager (APIM) 的公开可用 API。

因此,我了解与此设置相关的安全问题,我想为原生应用应用 OAuth2(根据 RFC 8252)。

我了解此类应用程序应该做的第一件事是通过Store API 中描述的接口向 WSO2 APIM 服务器注册,以便为每个应用程序接收唯一的消费者密钥/秘密,即动态客户端注册 (DCR) .

以下是为获取密钥而应发送的请求示例:

curl -X POST -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -d @payload.json https://localhost:9443/client-registration/v0.11/register

要执行此类请求,应使用 TLS 1.2 对其进行保护,并且使用 WSO2 APIM 的用户名/密码进行基本授权(在本例中为 Base64 编码 admin:admin

我知道它至少应该受到基本授权的保护,以提供一些针对 DoS 攻击的安全性,但另一方面,这意味着应用程序应该使用username:password 分发,以便能够进行 DCR。

如果它将与此信息一起分发,那么每个人都可以获取信息并请求例如恶意应用程序注册。

如何处理原生移动应用程序以安全地在 WSO2 APIM 中注册?我认为我对它的工作原理的理解中缺少一些东西。

这是否意味着安装移动应用程序的用户应该在 WSO2 APIM 上拥有自己的帐户,并且应该在安装后立即提供凭据?

当用户在 WSO2 APIM 中没有凭据但拥有通过 API 从 WSO2 APIM 访问的后端服务的凭据时,情况会怎样?是否可以使用此类凭据通过 WSO2 APIM 的 DCR 注册应用程序? (目前后端和WSO2 APIM认证没有集成)

【问题讨论】:

    标签: android ios oauth-2.0 wso2 wso2-am


    【解决方案1】:

    您对 APIM 工作原理的理解部分正确。让我解释并纠正整个事情。

    基本上,此方案涉及 3 方。

    1. API 开发者/发布者
    2. 应用程序开发人员(即您,我猜, 在你的情况下)
    3. 最终用户(即您的情况下的移动用户)

    如您所知,API 开发人员从 Publisher 门户开发和发布 API。然后应用程序开发人员可以在 API Store Portal 中看到这些 API。现在,如果他们想在他们的移动应用程序中使用这些 API,他们需要订阅这些 API。为此,他们需要 API 管理器中的一些东西来代表他们的移动应用程序。为此,他们在 API Store 门户中创建了一个应用程序,然后通过创建的应用程序订阅 API。

    现在应用开发者需要通过他们的移动应用调用 API 的密钥。为此,他们通过 Store 门户进行 DCR 调用并生成消费者密钥和消费者秘密对。使用这些,他们可以生成访问令牌。

    有几种不同的方法可以生成访问令牌。我们称它们为授权类型。例如,密码授权类型、客户端凭据授权类型、授权码授权类型等。客户端凭据授权类型只需要消费者密钥和消费者秘密对来生成访问令牌,其中密码授权类型还需要用户名和密码到消费者密钥,消费者秘密对。因此,如果您的移动应用程序用户在某种用户存储中,您可以使用密码授权类型,这可以帮助您识别 APIM 级别的每个用户。如果您没有这样的机制,您可以使用客户端凭据授权类型,通过它您无法在 APIM 级别区分最终用户。这里由密码授权类型生成的令牌代表最终用户,而由客户端凭据授权类型生成的令牌代表应用程序。

    在任何一种情况下,应用程序开发人员都必须将消费者密钥和消费者秘密对嵌入到他们的移动应用程序中,以便最终用户可以生成访问令牌来访问 API。重要的是用户不必单独调用 DCR。这是应用程序开发人员的任务。

    我希望这会有所帮助。

    EIDT:

    如果您让用户注册移动应用并将他们放在用户商店中,您可以使用授权码授予类型。然后您可以在您的移动应用中仅启用授权码授权类型,并设置回调 URL。因此,如果有人窃取了消费者机密并在不同的应用程序中使用它,即使通过授权码授权类型,他们也无法使用它来生成令牌,因为回调 URL 是在服务器端进行验证的。

    另一个选项是隐式授权类型,它不需要客户端秘密,但它有其自身的缺陷。

    【讨论】:

    • 没有。它是一个公共移动应用程序,所以我不想嵌入消费者和密钥并将它们与应用程序一起分发。那时有人很容易得到它们。我需要在应用程序安装期间进行 DCR,因为每个人都会将自己的密钥安全地存储在移动设备上。我要问的是,当我需要用户名密码凭据来请求在 WSO2 APIM 中注册时,在安装期间执行 DCR 的做法是什么。同样,我不想与应用程序分发凭据,并且用户在 WSO2 APIM 中没有帐户。
    • 如果最终用户不在用户存储中,有时您需要在移动应用中存储某种密码。如果您调用安全端点,这不是您可以避免的。也许您可以尝试像androidauthority.com/… 中提到的那样加密客户端机密,但是,所有这些都有局限性。
    • 用另外 2 个选项更新了我的答案。
    • 授权码授权类型看起来像是我想做的事情。您能否提供真实示例,如何使用 WSO2 APIM 使用其 API 来完成?我仍然不明白它将如何保护。要注册应用程序,我需要用户名和密码作为 WSO2 Store 的帐户,而应用程序的用户没有任何帐户。当用户在后端而不是 WSO2 中拥有帐户时,如何解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多