9.5. JavaScript Integration


Red Hat Single Sign-On Server 附带一个 JavaScript 库,可用于与策略 enforcer 保护的资源服务器交互。这个程序库基于 Red Hat Single Sign-On JavaScript 适配器,它可集成来允许您的客户端从 Red Hat Single Sign-On Server 获取权限。

您可以通过在 web 页面中包括 以下脚本 标签,从正在运行的 Red Hat Single Sign-On Server 实例获取这个库:

<script src="http://.../auth/js/keycloak-authz.js"></script>

完成此操作后,您可以创建一个 KeycloakAuthorization 实例,如下所示:

var keycloak = ... // obtain a Keycloak instance from keycloak.js library
var authorization = new KeycloakAuthorization(keycloak);

keycloak-authz.js 库提供两个主要功能:

  • 如果您要访问 UMA 保护的资源服务器,请使用权限 ticket 从服务器获取权限。
  • 通过发送资源和范围来从服务器获取权限。

在这两种情况下,库都允许您轻松与资源服务器和 Red Hat Single Sign-On 授权服务交互,以获取您的客户端可以用作 bearer 令牌来访问资源服务器上的受保护资源。

9.5.1. 从 UMA-Protected 资源服务器处理授权响应

如果资源服务器受策略强制保护,它将根据与 bearer 令牌一起执行的权限响应客户端请求。通常,当您尝试使用 bearer 令牌访问访问受保护资源的权限的资源服务器时,资源服务器会以 401 状态代码和 WWW-Authenticate 标头响应。

HTTP/1.1 401 Unauthorized
WWW-Authenticate: UMA realm="${realm}",
    as_uri="https://${host}:${port}/auth/realms/${realm}",
    ticket="016f84e8-f9b9-11e0-bd6f-0021cc6004de"

如需更多信息,请参阅 UMA 授权进程

您的客户端需要从资源服务器返回的 WWW-Authenticate 标头中提取权限票据,并使用库发送授权请求,如下所示:

// prepare a authorization request with the permission ticket
var authorizationRequest = {};
authorizationRequest.ticket = ticket;

// send the authorization request, if successful retry the request
Identity.authorization.authorize(authorizationRequest).then(function (rpt) {
    // onGrant
}, function () {
    // onDeny
}, function () {
    // onError
});

授权 功能完全异步,支持几个回调功能从服务器接收通知:

  • onGrant :功能的第一个参数。如果授权成功,并且服务器返回了具有请求权限的 RPT,则回调将接收 RPT。
  • onDeny :功能的第二个参数。只有服务器拒绝授权请求时调用。
  • onError :功能的第三个参数。只有服务器意外响应时才调用。

大多数应用都应该使用 onGrant 回调在 401 响应后重试请求。后续请求应包含 RPT 作为 bearer 令牌进行重试。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.