首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

学习如何引导 Hydra-2

学习如何引导 Hydra-2

将 Hydra                集成到您的应用程序中使用 Hydra 的主要目的是将它用于您的应用程序。幸运的是,官方存储库中提供了两个不错的示例,我们将使用其中的一个(Node.js 示例)。尽管                Go 应用程序很简单(参见),但我们将使用 。这个 Express 应用程序的基本思路是,通过使用 simple-oauth2 库,从 Hydra 服务器上的                /oauth2/auth 路径请求一个访问令牌。从这里,您可以使用 Hydra SDK                创建一个客户端实例,然后使用该实例代表用户来请求同意。建立这个实例并测试它很简单,因为已经发布了一个我们可以使用的 Docker                映像。为确保一切正常,并在您想要允许访问您创建的需要最终用户同意的 API 时,从第三方角度理解如何集成它,您可以运行该映像:
1
2
3
4
5
6
docker run -d --name hydra-consent --link hydra-server:hydra -p 9020:3000 \
-e HYDRA_CLIENT_ID=consent-app \
-e HYDRA_CLIENT_SECRET=consent-secret \
-e HYDRA_URL=https://hydra:4444 \
-e NODE_TLS_REJECT_UNAUTHORIZED=0 \
oryd/hydra-consent-app-express:latest




获取访问令牌同意应用程序(Node.js 应用程序容器)运行后,您需要创建一个 OAuth 用户应用程序客户端。在理论上,您会将二者用于 HTTP                API(或者任何完成 OAuth2 同意流的库)。现在,我们可以通过连接到 Hydra 服务器的 Hydra                二进制文件来运行这些命令。要创建该客户端并随后启动 OAuth 2.0 代码流,可运行以下命令:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
hydra clients create --skip-tls-verify \
--id some-consumer \
--secret consumer-secret \
-g authorization_code,refresh_token,client_credentials \
-r token,code,id_token \
--allowed-scopes openid,offline,hydra.clients \
--callbacks http://localhost:9010/callback

hydra token user --skip-tls-verify \
--auth-url https://localhost:9000/oauth2/auth \
--token-url https://hydra:4444/oauth2/token \
--id some-consumer \
--secret consumer-secret \
--scopes openid,offline,hydra.clients \
--redirect http://localhost:9010/callback




借助此命令,您可以通过浏览器返回一个 URL(比如                https://localhost:9000/oauth2/auth?client_id=some-consumer&redirect_uri=http+various_other_data)并进行登录。要输入的凭证已在该网页上提供,而且您可以勾选所有复选框,但这里给出的是用户在执行此流程时实际选择的复选框。这只是用户最有可能看到的部分复选框,因为此流程的剩余部分是在身份验证服务器或客户端应用程序的后端启动的。您也可以涵盖返回的访问令牌(而且因为我们是在一定范围内离线提供的,所以也可以涵盖一个刷新令牌)和它的有效期。根据 的介绍,也可以对这些令牌执行撤销、检查等。或许明智的做法是,应用程序集成此流程来检查所有以前的令牌,并在必要时刷新它们。幸运的是,此操作很容易通过                Hydra 完成。
使用访问令牌现在让我们使用身份验证令牌。尽管令牌本身可能拥有 API 的访问权,但您仍需要为用户创建一条策略,以防在默认情况下未启用它。使用我们之前通过                Hydra 二进制文件生成的访问令牌,运行以下命令:
1
2
3
4
5
6
hydra policies create --skip-tls-verify \
--actions get \
--allow \
--id consent-app-policy \
--resources "rn:hydra:clients" \
--subjects user:12345:dandean




例如,从这里,可以使用 cURL 或 Python 来查看我们创建的所有客户端。
1
2
curl --insecure -H "Authorization: bearer `ACCESS_TOKEN_FROM_ABOVE`"
                https://localhost:9000/clients/




至此,我们已经介绍了一些流程,包括如何设置 OAuth 2.0 服务器,同意流如何在另一个 Web 应用程序中运行,以及用户如何与它交互。
补充介绍:与 Python 结合使用将 Hydra 这样的工具与 Python 结合使用也是可行的。因为两个官方 SDK 都是使用                swagger-codegen 创建的,所以您可以按下列方式轻松地将它用于 Python:
1
2
brew install swagger-codegen
swagger-codegen generate -i ./docs/api.swagger.json -l python -o ./sdk/python/swagger




您还可以使用一种替代性 SDK,比如 。                对于本文,我们已将 Python SDK 推送到。
如果您完全通过 Python 来执行此操作,您需要采用某种方法获取初始访问令牌(如下所示)。
尽管前面已经提到过,OAuth 2.0 客户端可直接集成到 SDK 中(而且 python-flask codegen                似乎可以照常运行,只要您更改了它创建的配置文件中的 URL),但我将展示如何使用 requests_oauthlib                库获取初始身份验证令牌。
要进行此项设置,可使用 pip install requests_oauthlib 进行安装。
第一步是创建一个访问令牌,以便我们可以使用它为将要使用 Hydra 服务的用户创建策略和客户端:
1
2
3
4
5
6
7
8
9
from oauthlib.oauth2 import BackendApplicationClient
from requests.auth import HTTPBasicAuth

auth = HTTPBasicAuth('admin', 'admin-password') # from FORCE_ROOT_CLIENT_CREDENTIALS above
client = BackendApplicationClient(client_id=client_id)
oauth = OAuth2Session(client=client)

token = oauth.fetch_token(token_url='https://localhost:9000/oauth2/token', auth=auth, verify=False)
print(token)




现在我们得到了一个响应,如下所示:
1
2
3
{'access_token': '-tdmTUbaEXZLussxTD7NDUzakQ.VrpS4hOml1-
bw_5pkUlikqEs3jjvKOrPcE2hg4yNBBk', 'expires_in': 3599, 'scope': [''],
'token_type': 'bearer', 'expires_at': 1512371155.7248588}




有了这个访问令牌,随后就可以执行创建客户端、策略等实际任务。
结束语 您现在能将 Hydra 与您创建的任何 API 结合使用,使第三方能够安全地访问该                API。这样您就能安全地验证用户的身份,而无需担心他们的安全细节。例如,无需让用户注册并将用户密码存储在一个可能泄露并造成很大麻烦的数据库中,您可以在应用程序或网站中实现一个                OAuth2 同意流,大大减少对存储隐私用户数据的担忧。此外,您的用户将感受到一种更加轻松的注册过程。
返回列表