SylviaBABY commented on code in PR #1187: URL: https://github.com/apache/apisix-website/pull/1187#discussion_r913322780
########## website/i18n/zh/docusaurus-plugin-content-blog/2022/07/04/apisix-integrates-with-hydra.md: ########## @@ -0,0 +1,286 @@ +--- +title: "APISIX 如何与 Ory Hydra 集成" +authors: + - name: "Fei Han" + title: "Technical Writer" + url: "https://github.com/hf400159" + image_url: "https://github.com/hf400159.png" +keywords: +- Apache APISIX +- API Gateway +- 身份认证 +- Hydra +- Openid Connect +- OIDC +description: 本文介绍了 API 网关 Apache APISIX 通过 OpenID Connect 插件 与 Ory Hydra 集成实现集中式身份认证。 +tags: [Authentication] +--- + +> 本文介绍了 Apache APISIX 如何与 Ory Hydra 集成实现集中式身份认证。 + +<!--truncate--> + +## 背景介绍 + +### Apache APISIX + +[Apache APISIX](https://github.com/apache/apisix) 是一个开源的云原生 API 网关,作为 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。你可以使用 APISIX 来处理传统的南北向流量,以及服务间的东西向流量,也可以当做 K8s Ingress controller 来使用。 + +APISIX 的 `openid-connect` 插件支持 OpenID Connect 协议,用户可以使用该插件让 APISIX 对接众多认证鉴权软件,作为集中式认证网关部署于企业中。 + +### ORY Hydra + +[Ory Hydra](https://github.com/ory/hydra) 是支持 OAuth 2.0 和 OpenID Connect 协议的身份提供商之一,基于 OAuth 2.0 授权框架以及 Open ID Connect Core 1.0 框架实现,兼具开源与云原生特性。它可以与任何登录系统集成,通过 OAuth 2.0 Acces、Refresh 和 ID Tokens,使得第三方能够轻松访问你的 API,实现用户随时随地与任何应用程序的交互。 + +Ory Hydra 采用 Go 语言开发,为几乎所有开发语言都提供了 SDK,包括 Dart、.NET、Go、Java、PHP、Python、Ruby、Rust 和 Typescript。它适用于任何登录系统,并且可以轻松自定义登录体验。 + +## 简介 + +OpenID 是一种集中认证模式,它是一个去中心化的身份认证系统。使用 OpenID 的好处是:用户只需要在一个 OpenID 身份提供方的网站上注册和登录,使用一份账户密码信息即可访问不同应用。 + +通过 APISIX 支持的 `openid-connect` 插件,我们可以与支持 OpenID Connect 协议的认证程序集成。比如:[Ory Hydra]。更多信息请参考:[集中身份认证](https://apisix.apache.org/zh/blog/2021/08/25/using-the-apache-apisix-openid-connect-plugin-for-centralized-authentication/#%E4%BB%80%E4%B9%88%E6%98%AF%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81)。 + +Ory Hydra 的最大优势之一是:它实现了 OAuth 和 OpenID Connect 标准,而不是强制你使用 “Hydra 用户管理”(登录、注销、配置文件管理、注册)、特定模板引擎或者预定义的前端。 + +它允许使用你的程序所需的身份验证机制(基于令牌的 2FA、SMS 2FA 等),并且在你的业务系统中实现用户管理和登录。当然你也可以使用现有的解决方案,例如 [authboss](https://github.com/go-authboss/authboss),并为你提供 OAuth 2.0 和 OpenID Connect 的所有优势功能,同时对业务逻辑和技术栈的侵入性最小。 + +OAuth 2.0 适用于多种环境和多用途场景。以下信息可能会帮助你确定 OAuth 2.0 和 Hydra 是否适合某个场景: + +1. 允许第三方的合作方访问你的 API。 +2. 成为像 Google、Facebook 或 Microsoft 这样的身份认证提供者。 +3. 使浏览器、移动设备或可穿戴应用程序能够访问你的 API:运行 OAuth2 提供程序可以很好地实现这一点。你不必在设备上存储密码,并且可以随时撤销访问令牌。 +4. 想要限制后端服务可以相互读取的信息类型。例如,只允许评论服务获取用户配置文件更新,但不能读取用户密码。 + +## 操作步骤 + +接下来,将使用真实示例为你展示 APISIX 如何与 Hydra 集成。在该示例中将使用 Docker 部署所需的环境,请在执行本操作前安装完成 [Docker](https://docs.docker.com/engine/install/)。 + +### 步骤一:创建并部署数据库 + +为了快速部署测试环境,我们将使用 Docker 运行 PostgreSQL 作为 Hydra 的数据库。建议不要在生产环境使用 Docker 运行数据库。 + +```shell +docker network create hydraguide && \ +docker run \ + --network hydraguide \ + --name ory-hydra-example--postgres \ + -e POSTGRES_USER=hydra \ + -e POSTGRES_PASSWORD=secret \ + -e POSTGRES_DB=hydra \ + -d postgres:9.6 +``` + +上述命令将创建一个名称为 `hydraguide` 的网络,并且启动一个名称为 `ory-hydra-example--postgres` 的 Postgres 实例,该实例创建了数据库 `hydra`,用户 `hydra` 和用户密码 `secret`。 + +### 步骤二:部署 Hydra + +该步骤中将会把 `4444` 映射到 `5444` 和 `4445` 映射到 `5445` 端口,请确保这些端口未被占用。 + +1. 系统密钥只能针对新数据库设置,不支持密钥轮换。 此密钥用于加密数据库,每次进程(重新)启动时都需要设置为相同的值。 你可以使用 /dev/urandom 生成密钥。但请确保在你定义它的时候,该密钥都必须相同。例如,你可以将值存储在某处: Review Comment: ```suggestion 1. 系统密钥只能针对新数据库设置,不支持密钥轮换。 此密钥用于加密数据库,每次进程(重新)启动时都需要设置为相同的值。 你可以使用 `/dev/urandom` 生成密钥。但请确保在你定义它的时候,该密钥都必须相同。例如,你可以将值存储在某处: ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
