[英]WSO2 Api Manager OAuth2 DCR security in public native mobile app
我正在设计用于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中没有凭据,但具有从WSO2 APIM通过API访问的后端服务的凭据,情况会如何? 可以使用此类凭据来通过WSO2 APIM的DCR注册应用程序吗? (当前后端和WSO2 APIM身份验证尚未集成)
您对APIM的工作方式的理解部分正确。 让我解释并纠正整个问题。
基本上,此方案涉及3个参与方。
如您所知,API开发人员可以通过Publisher门户开发和发布API。 然后,应用程序开发人员可以在API Store Portal中看到那些API。 现在,如果他们想在其移动应用程序中使用这些API,则需要订阅这些API。 为此,他们需要API管理器中的某些内容来表示其移动应用程序。 为此,他们在API Store门户中创建一个应用程序,然后通过创建的应用程序订阅API。
现在,应用程序开发人员需要密钥才能通过其移动应用程序调用API。 为此,他们通过商店门户进行了DCR呼叫,并生成了消费者密钥和消费者秘密对。 使用它们,它们可以生成访问令牌。
有几种不同的生成访问令牌的方式。 我们称它们为赠款类型。 例如,密码授予类型,客户端凭证授予类型,授权代码授予类型等。客户端凭证授予类型仅需要使用消费者密钥和消费者秘密对来生成访问令牌,其中密码授予类型还需要用户名和密码。消费者密钥,消费者秘密对。 因此,如果您的移动应用程序用户位于某种用户存储区中,则可以使用密码授予类型,这可以帮助您识别APIM级别的每个用户。 如果没有这种机制,则可以使用客户端凭据授予类型,通过这种类型,您不能在APIM级别区分最终用户。 在此,由密码授予类型生成的令牌代表最终用户,而由客户端凭证授予类型生成的令牌代表应用程序。
无论哪种情况,应用程序开发人员都必须将消费者密钥和消费者秘密对嵌入到他们的移动应用程序中,以便最终用户可以生成访问令牌来访问API。 重要的是用户不必单独呼叫DCR。 这是应用程序开发人员的任务。
我希望这有帮助。
EIDT:
如果允许用户注册移动应用程序并将其保存在用户存储中,则可以使用授权代码授予类型。 然后,您只能在移动应用程序中启用授权码授予类型,并设置回调URL。 因此,如果有人窃取了消费者的秘密并在其他应用程序中使用它,则即使通过授权代码授予类型,他们也无法使用它来生成令牌,因为回调URL已在服务器端进行了验证。
另一个选择是隐式授予类型,它不需要客户端秘密,但是有其自身的缺陷。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.