WSO2 API Manager是用于设计和发布API,创建和管理开发者社区以及可扩展地路由API流量的完整解决方案。 它利用了WSO2企业服务总线,WSO2身份服务器和WSO2治理注册表中经过验证的,可用于生产的集成,安全性和治理组件。 此外,它利用WSO2业务活动监视器进行大数据分析,使您可以即时了解API行为。

到目前为止,API Manager的局限性之一是它与
WSO2身份服务器 。 WSO2 Identity Server充当密钥管理器,用于发布和验证OAuth令牌。

通过改进的架构(仍在讨论中),我们计划使用密钥管理器来扩展所有集成点,以便您可以引入自己的OAuth授权服务器。 而且–我们将在产品中附带标准扩展点。 这些扩展点围绕相应的OAuth 2.0配置文件构建。 万一您的授权服务器偏离标准,则需要实现KeyManager接口并插入自己的实现。

API发布者

API开发人员首先登录到API发布器,并使用所有相关元数据创建一个API,然后将其发布到API商店和API网关。

API Publisher还将通过OAuth资源集注册端点[1]将API元数据发布到外部授权服务器中。

样品申请:

{
"name": "Photo Album",
"icon_uri": "http://www.example.com/icons/flower.png",
"scopes": [ "http://photoz.example.com/dev/scopes/view", "http://photoz.example.com/dev/scopes/all" ],
"type": "http://www.example.com/rsets/photoalbum"
}

名称必填。 人类可读的字符串,描述一组一个或多个资源。 授权服务器可以在其资源所有者用户界面中为资源所有者使用该名称。

icon_uri可选。 表示资源集的图形图标的URI。 授权服务器可以在其资源所有者用户界面中为资源所有者使用引用的图标。

必需的范围。 一个数组,提供对此资源集可用的范围描述的URI引用。

输入OPTIONAL。 唯一标识资源集语义的字符串。 例如,如果资源集由单个资源组成,这是一个身份声明,该身份声明利用标准化声明语义来表示“已验证的电子邮件地址”,则此属性的值可以是此声明的标识URI。

样本响应:

HTTP/1.1 201
Created Content-Type: application/json
ETag: (matches "_rev" property in returned object) ... { "status": "created", "_id": (id of created resource set), "_rev": (ETag of created resource set)
}

将资源发布到授权服务器的目的是使它知道可用资源以及与它们关联的范围。 身份管理员可以在这些作用域和企业角色之间建立关系。 基本上,您可以将范围与企业角色相关联。

API商店

Application Developer登录到API Store,并发现他/她想要为其应用程序创建的API并订阅这些API,最后创建一个应用程序。 每个应用程序均由其客户端ID唯一标识。 有两种方法可以将客户端ID与在API Store中创建的应用程序相关联。

  1. 应用程序开发人员引入客户端ID。

    应用程序开发人员与授权服务器一起创建带外客户端ID,并将客户端ID与他刚在API Store中创建的应用程序相关联。 在这种情况下,不使用授权服务的动态客户端注册终结点(第3步和第4步)。

  2. API存储调用外部授权服务器的动态客户端注册端点。

    一旦应用程序开发人员创建了应用程序(通过对一组API进行分组),API商店将调用授权服务器的动态客户端注册端点。

样品申请(第3步):

POST /register HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: authz.server.com {
"client_name": "My Application”,
"redirect_uris":[" https://client.org/callback","https://client.org/callback2 "], "token_endpoint_auth_method":"client_secret_basic",
"grant_types": ["authorization_code" , "implicit"],
"response_types": ["code" , "token"],
"scope": ["sc1" , "sc2"],
}

client_name:在授权过程中提供给用户的客户端的可读名称。 如果省略,则授权服务器可以向用户显示原始的“ client_id”值。 建议客户始终发送此字段。

client_uri:提供有关客户端信息的网页的URL。 如果存在,服务器应该以可点击的方式向最终用户显示该URL。 建议客户始终发送此字段。

logo_uri:引用客户端徽标的URL。 如果存在,服务器应在批准期间将此图像显示给最终用户。 该字段的值必须指向有效的图像文件。

scope:客户端请求访问令牌时可以使用的范围值的空格分隔列表。 此列表中值的语义是特定于服务的。 如果省略,授权服务器可以用一组默认的作用域注册一个客户端。

grant_types:客户端可以使用的OAuth 2.0授权类型的数组。

response_types:客户端可以使用的OAuth 2.0响应类型的数组。

token_endpoint_auth_method:令牌端点的请求的身份验证方法。

redirect_uris:重定向URI值的数组,用于基于重定向的流,例如授权码和隐式流。

样本响应(步骤4):

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache {
"client_id":"iuyiSgfgfhffgfh",
"client_secret": "hkjhkiiu89hknhkjhuyjhk",
"client_id_issued_at":2343276600,
"client_secret_expires_at":2503286900,
"redirect_uris":[" https://client.org/callback ", " https://client.org/callback2 "],
"grant_types": "authorization_code",
"token_endpoint_auth_method": "client_secret_basic"
}

OAuth客户端应用程序

这超出了API Manager的范围。 客户端应用程序可以通过其支持的任何授权类型与外部授权服务器进行对话,并获得访问令牌[3]。 scope参数在所有令牌请求中都是可选的–客户端省略时,授权服务器可以将默认范围与访问令牌相关联。 如果根本没有使用范围,则API网关可以根据与OAuth客户端,最终用户,资源和操作相关的其他参数进行授权检查。

如果客户端通过OAuth授予请求发送了一组范围,则只有当我们通过OAuth资源集注册端点通过API发布者将API元数据发布到外部授权服务器中时,这些范围对授权服务器才有意义。 根据用户的角色以及与角色相关联的范围,授权服务器只能为OAuth客户端请求的范围的子集颁发访问令牌。

客户凭证授予类型样本请求:

POST /token HTTP/1.1
Host: server.example.com Authorization: Basic Base64Encode(Client ID:Client Secret) Content-Type: application/x-www-form-urlencoded grant_type=client_credentials Sample Response:HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store Pragma: no-cache {
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"example_parameter":"example_value"
}

资源所有者密码授予类型示例请求:

POST /token HTTP/1.1 Host: server.example.com
Authorization: Basic Base64Encode(Client ID:Client Secret)
Content-Type: application/x-www-form-urlencoded grant_type=password&username=johndoe&password=A3ddj3wSample Response:HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store Pragma: no-cache {
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example", "expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}

API网关

API网关将拦截OAuth客户端应用程序和API之间流动的所有消息-并提取出HTTP授权头中的访问令牌。 提取访问令牌后,API网关将调用授权服务器的令牌自省端点[4]。

样品申请:

POST /introspect HTTP/1.1
Host: authserver.example.com
Content-type: application/x-www-form-urlencoded
Accept: application/json
Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbUl3token=X3241Affw.4233-99JXJ

样本响应:

{
"active": true,
"client_id":"s6BhdRkqt3",
"scope": "read write dolphin",
"sub": "2309fj32kl",
"user_id": "jdoe",
"aud": "https://example.org/protected-resource/*",
"iss": "https://authserver.example.com/"
}

有效的。 所显示令牌当前是否处于活动状态的布尔指示符。

可选。 整数时间戳,以自UTC 1970年1月1日以来的秒数为单位,指示此令牌何时过期。

iat可选。 整数时间戳,以自UTC 1970年1月1日以来的秒数为单位,指示此令牌最初的发布时间。

范围可选。 以空格分隔的字符串列表,代表与此令牌关联的范围。

需要client_id。 请求此令牌的OAuth客户端的客户端标识符。

子可选。 授权此令牌的资源所有者的AS本地的机器可读标识符。

需要user_id。 授权此令牌的用户的可读标识符。

aud可选。 特定于服务的字符串标识符或代表此令牌的预期受众的字符串标识符列表。

是可选的。 表示此令牌的发行者的字符串。

token_type可选。 OAuth 2.0中定义的令牌类型

API网关从授权服务器获得令牌自检响应后,它将检查客户端应用程序(客户端ID)是否已订阅相应的API,然后还将验证范围。 API网关知道API所需的范围,并且自省响应会返回与访问令牌关联的范围。

如果一切正常,API网关将生成一个JWT并将其发送到下游API。 生成的JWT也可以选择包含用户属性。 在这种情况下,API网关将与授权服务器的UserInfo端点对话。

同样,API网关也可以简单地直通访问令牌,而无需验证访问令牌及其相关范围。 在这种情况下,API网关将仅进行限制和监视。

安全端点

在此提议的经过改进的体系结构中,WSO2 API管理器必须与密钥管理器公开的以下端点进行对话。

  • 资源集注册
  • 动态客户端注册端点
  • 自省端点
  • UserInfo端点

对于前三个端点,API管理器将仅充当受信任的系统。 相应的KeyManager实现应知道如何对这些端点进行身份验证。 OpenID Connect UserInfo端点将在运行时与用户提供的访问令牌一起调用。 仅当相应的访问令牌具有从授权服务器读取用户的配置文件的特权时,此方法才有效。

参考文献

[1]:http://tools.ietf.org/html/draft-hardjono-oauth-resource-reg-02

[2]:http://tools.ietf.org/html/draft-ietf-oauth-dyn-reg-19

[3]:http://tools.ietf.org/html/rfc6749

[4]:http://tools.ietf.org/html/draft-richer-oauth-introspection-06

翻译自: https://www.javacodegeeks.com/2014/11/revamping-wso2-api-manager-key-management-architecture-around-open-standards.html

围绕开放标准改进WSO2 API Manager密钥管理体系结构相关推荐

  1. wso2_围绕开放标准改进WSO2 API Manager密钥管理体系结构

    wso2 WSO2 API Manager是用于设计和发布API,创建和管理开发人员社区以及可扩展地路由API流量的完整解决方案. 它利用了来自WSO2企业服务总线,WSO2身份服务器和WSO2治理注 ...

  2. WSO2 API Manager调研学习总结

    近期要做一个SOA服务治理相关的项目,详细调研了下WSO2的API Manager(简称,APIM).因为在调研过程中发现,国内研究WSO2的开发者较少,社区中也不是很活跃,可供直接上手的中文文档很少 ...

  3. 漏洞分析: WSO2 API Manager 任意文件上传、远程代码执行漏洞

    漏洞描述 某些WSO2产品允许不受限制地上传文件,从而执行远程代码.以WSO2 API Manager 为例,它是一个完全开源的 API 管理平台.它支持API设计,API发布,生命周期管理,应用程序 ...

  4. WSO2 API Manager安装部署配置

    1. 系统要求 至少 3GHz CPU 至少 4GB 内存 (2GB给WSO2,2GB给操作系统) 至少 10GB 磁盘 JDK1.8_x64, 其中JDK1.8.0_151版本存在已知的GZIP d ...

  5. oauth2和jwt_使用具有OAuth2的Web应用程序和JWT的使用来调用API – WSO2 API Manager

    oauth2和jwt 在这篇文章中,我将分享我在WSO2 API管理器(API-M)中针对行业中非常常见且有用的场景的经验和理解. 简要地说明以下流程. 公开了一个API,供应用程序开发人员在API管 ...

  6. 使用带有OAuth2的Web应用程序和使用JWT来调用API – WSO2 API Manager

    在这篇文章中,我将分享我在WSO2 API管理器(API-M)方面的经验和理解,以解决该行业中非常普遍和有用的情况. 简要地说明以下流程. 公开了一个API,供应用程序开发人员在API Manager ...

  7. WSO2 Api Manager 集成 Analytics

    WSO2 Api Manager仅实现了Api网关功能,但没有统计监控功能,必须与其Analytics组件集成才能实现,集成过程如下: 参考链接:https://docs.wso2.com/displ ...

  8. WSO2 API Manager代码问题漏洞(CVE-2022-29464)

    文章目录 0x01 漏洞介绍 0x02 影响版本 0x03 漏洞编号 0x04 漏洞查询 0x05 漏洞环境 0x06 漏洞复现 0x07 修复建议 免责声明 摘抄 0x01 漏洞介绍 WSO2 AP ...

  9. WSO2 API Manager的使用

    以下为:使用WSO2 API Manager的发布器和开发人员门户创建.发布和调用API的分步指南. 官网链接:https://apim.docs.wso2.com/en/latest/get-sta ...

最新文章

  1. win10安装mysql无服务_win10装sql没有SQL Server 服务
  2. 洛谷 P2893 [USACO08FEB]修路Making the Grade 解题报告
  3. 会计期间变式OB52
  4. 拉文大学计算机科学,拉文大学
  5. Redis常见面试题6 -- 持久化方式之AOF以及混合模式
  6. OpenMP变量的私有与共享
  7. HDU - 1863-畅通工程(最小生成树)
  8. 快速实现MySQL迁移到Redis
  9. sqlite3:not found 解决方法
  10. iOS---实现在屏幕上实时绘图的简单效果---CAShaperLayer和UIBezierPath的简单运用
  11. 单片机开发,主函数没调用任何程序,串口一直收到00 0 FF之类的数据
  12. copy uncode Cstring
  13. Jenkins书籍推荐
  14. 蓄水池采样算法的python实现_蓄水池采样算法-Reservoir Sampling
  15. e4a和php教程,2019开源影视APP优化运营版+对接苹果cms10+全套类库E4A资源+开发文档+搭建教程源码...
  16. 做擦边网站 服务器放在狗爹,在GoDaddy搭建Prosper202服务器
  17. ETL对文件数据进行处理,进入到数据仓库
  18. Win10下媲美apt的包管理工具 Scoop 的安装以及常用软件清单
  19. leetcode_91.解码方法
  20. Java笔记013-IDEA、包、访问修饰符、封装、继承、多态、Super、方法重写/覆盖(override)、java的动态绑定机制

热门文章

  1. 【Unity导入MySql.Data.dll报错】
  2. 【Mind+Python】基于Pyecharts+Flask+Pinpong智能家居数字大屏系统
  3. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)
  4. 【C++笔记】 判断两个数互质(做大公约数为1)
  5. 2022年未来网络与通信专题讲座(南京专技人员继续教育)
  6. stm32十六进制字符串转十进制数值代码
  7. 5GNR漫谈4:CORESET与SearchSpace
  8. LeetCode 164. 最大间距(桶排序+鸽笼原理)
  9. Java代码实现ping命令
  10. vue统一或单独控制接口请求时间