IdentityManager

AMD: require(["geoscene/identity/IdentityManager"], (geosceneId) => { /* code goes here */ });
ESM: import geosceneId from "@geoscene/core/identity/IdentityManager";
类: geoscene/identity/IdentityManager
起始版本:GeoScene API for JavaScript 4.0

此对象提供用于管理以下资源的用户凭据的框架和帮助程序方法:

  • 受保护的 geoscene.cn 或 geoscene Enterprise 门户资源(例如 web 地图)。

  • 使用基于令牌的身份验证保护 GeoScene Server 资源。如果您的应用程序访问不同域的服务,则视为跨域请求,您需要设置代理或使用 CORS(如果浏览器支持)。如果支持 CORS,Identity Manager 就知道通过 https 向令牌服务发出请求。

阻止通过 http 的身份验证请求,因为可以在服务器日志中查看通过 GET 发送的敏感数据。为防止出现这种情况,Identity Manager 要求您使用 POST over https 来确保您的凭据是安全的。查看使用代理CORS 帮助主题以获取更多详细信息。

IdentityManager 模块与 API 中的其他模块略有不同。它不是返回一个类构造函数,而是返回一个已经由这个模块创建的单例实例。

另请参阅:

属性概述

名称 类型 描述
微件更多信息

对话框微件用于在应用程序尝试访问安全资源时质询用户的凭据。

更多信息IdentityManager
整数更多信息

令牌的建议生存期(以分钟为单位)。

更多信息IdentityManager

属性详情

dialog Widget

对话框微件用于在应用程序尝试访问安全资源时质询用户的凭据。此属性在对话框创建事件触发后可用。

tokenValidity Number

令牌的建议生存期(以分钟为单位)。

默认值:60

方法概述

名称 返回类型 描述
Promise<Object>更多信息

如果用户已经登录以访问给定的资源并且在使用给定的应用程序 ID 时被允许这样做,则返回一个凭据

更多信息IdentityManager
Promise<Credential>更多信息

如果用户已经登录以访问给定资源,则返回凭据

更多信息IdentityManager
更多信息

销毁所有凭据。

更多信息IdentityManager
更多信息

禁止使用 window.postMessage 来处理由 enablePostMessageAuth 启用的身份验证请求。

更多信息IdentityManager
布尔值更多信息

在实例上发出事件。

更多信息IdentityManager
更多信息

使 IdentityManager 能够为在子 iframe 中运行的应用程序为给定资源提供身份验证请求。

更多信息IdentityManager
Credential更多信息

返回由指定 url 标识的资源的凭据

更多信息IdentityManager
OAuthInfo更多信息

返回传入的门户服务器 URL 的 OAuthInfo 配置。

更多信息IdentityManager
ServerInfo更多信息

返回有关托管指定 URL 的服务器的信息。

更多信息IdentityManager
Promise<Object>更多信息

返回一个包含令牌及其到期时间的对象。

更多信息IdentityManager
Promise<Credential>更多信息

返回可用于访问由输入 URL 标识的安全资源的 Credential 对象。

更多信息IdentityManager
布尔值更多信息

指示实例上是否存在与提供的事件名称匹配的事件侦听器。

更多信息IdentityManager
更多信息

在应用程序初始化期间使用先前从 toJSON() 方法获得的 JSON 调用此方法,该方法用于重新水合 IdentityManager 的状态。

更多信息IdentityManager
布尔值更多信息

指示 IdentityManager 是否正忙于接受用户输入。

更多信息IdentityManager
Object更多信息

在实例上注册事件处理程序。

更多信息IdentityManager
更多信息

注册 OAuth 2.0 配置。

更多信息IdentityManager
更多信息

注册安全服务器和令牌端点。

更多信息IdentityManager
更多信息

将给定的 OAuth 2.0 访问令牌或 GeoScene Server 令牌注册到 IdentityManager。

更多信息IdentityManager
更多信息

用户成功登录后,将被重定向回应用程序。

更多信息IdentityManager
更多信息

在弹出回调页中使用此方法将令牌和其他值传递回 IdentityManager。

更多信息IdentityManager
更多信息

当访问受保护的资源时,IdentityManager 可能会提示输入用户名和密码,并使用安全连接将它们发送到服务器。

更多信息IdentityManager
Object更多信息

以 JSON 格式返回此对象的属性。

更多信息IdentityManager

方法详情

checkAppAccess(resUrl, appId){Promise<Object>}
起始版本:GeoScene API for JavaScript 4.10

如果用户已经登录以访问给定的资源并且在使用给定的应用程序 ID 时被允许这样做,则返回一个凭据。此外,它还返回一个 boolean viewOnly 属性,指示应用程序是否只能查看。默认值为 false。如果用户尚未登录或无权访问,则 Promise 将被拒绝并调用其错误回调。

除非您正在构建许可的应用程序,否则这种情况通常并不常见。此外,请注意,仅当您的应用程序与 GeoScene Enterprise Server 位于同一域中并且仅适用于在 GeoScene 组织中注册为项目的应用程序时,才应使用此方法。

参数:
resUrl String

资源的 URL。

appId String

已注册的 OAuth 应用程序 ID。

返回:
类型 说明
Promise<Object> 解析为包含以下属性的对象:
属性 类型 说明
credential Credential 用户的凭据。
viewOnly 布尔值 指示应用程序是否仅可见。默认为 false
checkSignInStatus(resUrl){Promise<Credential>}

如果用户已经登录以访问给定资源,则返回凭据。如果用户尚未登录或无权访问,则promise将被拒绝并调用其错误回调。

参数:
resUrl String

资源的 URL。

返回:
类型 说明
Promise<Credential> 解析为已登录用户的返回凭据。
destroyCredentials()

销毁所有凭据。如果使用包含注销功能的应用程序,则最好调用此方法,因为通过 OAuth 生成的任何令牌都将自动吊销。

disablePostMessageAuth()
起始版本:GeoScene API for JavaScript 4.19
止使用 window.postMessage 来处理由 enablePostMessageAuth 启用的身份验证请求。应调用此函数以防止 SPA 路由应用中在需要转换路由时出现内存泄漏。设置此项有助于清理和删除任何 enablePostMessageAuth 添加的 windows message 事件侦听器
另请参阅:
emit(type, event){Boolean}
起始版本:GeoScene API for JavaScript 4.5

在实例上发出事件。仅当创建此类的子类时,才应使用此方法。

参数:
type String

事件的名称。

event Object
可选

事件负载。

返回:
类型 说明
布尔值 true 如果通知了侦听器
enablePostMessageAuth(resUrl)
起始版本:GeoScene API for JavaScript 4.19
IdentityManager 能够为在子 iframe 中运行的应用程序为给定资源提供身份验证请求。唯一允许请求凭证的应用程序要么在 *.geoscene.cn 上运行,要么与主机应用程序在同一源上运行。来自其他应用的请求将被忽略。

任何时候只能以这种方式认证一个资源。资源的 URL 应用作名为 arcgis-auth-portal 的参数的值,该参数包含在 iframe 的 src URL 中。iframe 的 src URL 还应包含另一个名为 arcgis-auth-origin 的参数,其值为 window.location.origin。这两个参数值都应该使用 encodeURIComponent 进行 URL 编码。IdentityManager 或 iframe 应用程序中运行的 UserSession 需要用户身份验证才能访问给定资源时使用这些参数

参数:
resUrl String
可选

资源的 URL。

另请参阅:
findCredential(url, userId){Credential}

返回由指定 url 标识的资源的凭据。或者,您可以提供 userId 来查找特定用户的凭据。

参数:
url String

服务器的 URL。

userId String
可选

您要为其获取凭据的用户 ID。

返回:
类型 说明
Credential 由指定 URL 标识的资源的凭据。
findOAuthInfo(url){OAuthInfo}

返回传入的 Portal 服务器 URL 的 OAuthInfo 配置。

参数:
url String

门户的 URL。

返回:
类型 说明
OAuthInfo 传入的 Portal 服务器 URL 的 OAuthInfo 配置。
示例:
require(["geoscene/identity/IdentityManager"], function(geosceneId) {
  let portalURL = "https://host.arcgis.com";
  findOAuthInfo = function (){
    let oAuthInfo = geosceneId.findOAuthInfo(portalURL)
    console.log(oAuthInfo.toJSON())
  }
});
findServerInfo(url){ServerInfo}

返回有关托管指定 URL 的服务器的信息。

参数:
url String

服务器的 URL

返回:
类型 说明
ServerInfo 传入的服务器 URL 的 ServerInfo 配置。
generateToken(serverInfo, userInfo, options){Promise<Object>}

返回一个包含令牌及其到期时间的对象。必须提供包含令牌服务 URL 的 ServerInfo 对象和包含用户名和密码的用户信息对象。这是一个辅助方法,通常由子类调用以生成令牌。

参数:
规范:
serverInfo ServerInfo

包含令牌服务 URL 的 ServerInfo 对象。

userInfo Object

包含用户名和密码的用户信息对象。

options Object
可选

有关此对象的结构,请参阅下表。

规范:
serverUrl String

服务器 URL。

token String

服务器令牌。

指示服务器是否需要 SSL。

返回:
类型 说明
Promise<Object> 解析为包含令牌和过期时间的对象。
getCredential(url, options){Promise<Credential>}

返回可用于访问由输入 URL 标识的安全资源的 Credential 对象。

参数:
规范:
url String

安全资源的 URL。

options Object
可选

有关选项对象的结构,请参阅下表。

规范:
error Error
可选

服务器从上次尝试获取给定 URL 时返回的错误对象。

oAuthPopupConfirmation Boolean
可选
默认值:true

如果设置为 false,则在打开 OAuth 弹出窗口之前,不会向用户显示对话框。

token String
可选

用于上次尝试获取给定 URL 的失败尝试的令牌。

返回:
类型 说明
Promise<Credential> 解析为包含可用于访问由输入 URL 标识的安全资源的凭据的对象。
hasEventListener(type){Boolean}

指示实例上是否存在与提供的事件名称匹配的事件侦听器。

参数:
type String

事件的名称。

返回:
类型 说明
布尔值 如果类支持输入事件,则返回 true。
initialize(json)

在应用程序初始化期间使用先前从 toJSON() 方法获得的 JSON 调用此方法,该方法用于重新水合 IdentityManager 的状态。

参数:
json Object

toJSON() 方法获得的 JSON。

isBusy(){Boolean}

指示 IdentityManager 是否正忙于接受用户输入。例如,如果用户调用了 signIn 并正在等待响应,则返回 true

返回:
类型 说明
布尔值 IdentityManager 当前是否正在接受用户输入。
on(type, listener){Object}

在实例上注册事件处理程序。调用此方法以将事件与侦听器挂钩。

参数:

要侦听的事件或事件数组。

listener Function

事件触发时调用的函数。

返回:
类型 说明
Object 返回带有 remove() 方法的事件处理程序,应调用该方法以停止侦听事件。
属性 类型 说明
remove 函数 调用时,从事件中删除侦听器。
示例:
view.on("click", function(event){
  // event is the event handle returned after the event fires.
  console.log(event.mapPoint);
});
registerOAuthInfos(oAuthInfos)

注册 OAuth 2.0 配置。

参数:
oAuthInfos OAuthInfo[]

定义 OAuth 配置的 OAuthInfo 对象数组。

示例:
require(["geoscene/identity/OAuthInfo", "geoscene/identity/IdentityManager"], function(OAuthInfo, geosceneId) {
  let oAuthInfo = new OAuthInfo({
    appId: "<registered client id>"
  }); // required parameter
  geosceneId.registerOAuthInfos([oAuthInfo]);
});
registerServers(serverInfos)

注册安全服务器和令牌端点。

参数:
serverInfos ServerInfo[]

定义安全服务和令牌端点的 ServerInfos 对象数组。IdentityManager 会做出最佳猜测来确定安全服务器和令牌端点的位置。因此,在大多数情况下,不需要调用此方法。但是,如果您的服务器或令牌端点的位置不是标准的,请使用此方法注册该位置。

示例:
require(["geoscene/identity/ServerInfo", "geoscene/identity/IdentityManager"], function(ServerInfo, geosceneId) {
  let serverInfo = new ServerInfo();
  serverInfo.server = "https://sampleserver6.arcgisonline.com";
  serverInfo.tokenServiceUrl = "https://sampleserver6.arcgisonline.com/arcgis/tokens/generateToken";
  serverInfo.hasServer = true;
  geosceneId.registerServers([serverInfo]);
});
registerToken(properties)

将给定的 OAuth 2.0 访问令牌或 GeoScene Server 令牌注册到 IdentityManager。有关其他信息,请参阅 registerOAuthInfosregisterToken 方法是一种高级工作流程,用于在您不希望用户登录时预先注册长期令牌。

一旦用户登录,访问令牌就会在 IdentityManager 中注册。随后,应用程序发出的每个 AJAX 请求都会在访问 Web 地图和存储在 GeoScene Online 中的其他项目或服务器上的资源时转发此令牌。

参数:
规范:
properties Object

有关属性对象的结构,请参阅下表。

规范:
expires Number
可选

令牌过期时间指定为自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数。

server String

对于 GeoScene Online 或 Portal,这是 https://www.geosceneonline.cn/geoscene/sharing/rest 或类似于 https://www.example.com/portal/sharing/rest。对于 GeoScene Server,这类似于 https://www.example.com/geoscene/rest/services

可选

如果用户拥有 GeoScene Online 组织帐户并且组织配置为仅允许通过 SSL 访问资源,则将此设置为 true

token String

访问令牌。

userId String
可选

拥有访问令牌的用户的 ID。

setOAuthRedirectionHandler(handlerFunction)

用户成功登录后,将被重定向回应用程序。如果应用程序需要在重定向页面之前执行自定义逻辑,请使用此方法IdentityManager 使用包含重定向属性的对象调用自定义处理程序函数。

参数:
handlerFunction handlerCallback

调用时,传递给 setOAuthRedirectionHandler 的回调接收一个包含重定向属性的对象。

示例:
require(["geoscene/identity/IdentityManager"],
function(geosceneId)
{
 geosceneId.setOAuthRedirectionHandler(function(info)
  {
   // Execute custom logic then perform redirect
   window.location = info.authorizeUrl + "?" + ioquery.objectToQuery(info.authorizeParams);
  });
});
setOAuthResponseHash(hash)

在弹出回调页中使用此方法将令牌和其他值传递回 IdentityManager。

参数:
hash String

令牌信息以及任何其他值都需要传递回 IdentityManager。

setProtocolErrorHandler(handlerFunction)

当访问受保护的资源时,IdentityManager 可能会提示输入用户名和密码,并使用安全连接将它们发送到服务器。由于潜在的浏览器限制,如果应用程序通过 HTTP 协议运行,则可能无法与服务器建立安全连接。在这种情况下,标识管理器将中止获取受保护资源的请求。要解决此问题,请使用 HTTPS 支持配置 Web 应用程序服务器,并通过 HTTPS 运行应用程序。这是生产环境的推荐解决方案。但是,对于不支持 HTTPS 的内部开发环境,可以定义一个协议错误处理程序,以允许标识管理器通过 HTTP 协议继续执行该过程。

参数:
规范:
handlerFunction Function

协议不匹配时要调用的函数。

规范:
resourceUrl String

安全资源 URL。

serverInfo ServerInfo

描述托管安全资源的服务器的 ServerInfo 对象。

toJSON(){Object}

以 JSON 格式返回此对象的属性。它可以存储在 cookie 中或保留在 HTML5 LocalStorage 中,以后用于:

  • 在用户下次打开应用程序时初始化标识管理器。
  • 在网站的多个网页之间共享标识管理器的状态。这样,当用户多次启动您的应用或在您的网站中的多个网页之间导航时,系统就不会要求用户重复登录。
返回:
类型 说明
Object 表示调用此方法的 IdentityManager 实例的 JSON 对象。

类型定义

handlerCallback(authorizeParams, authorizeUrl, oAuthInfo, resourceUrl, serverInfo)

调用 setOAuthRedirectionHandler() 时要执行的回调。

参数:
authorizeParams Object

包含用于访问安全服务的授权参数的对象。请参阅下表,其中描述了此对象的属性。

规范:
client_id String

已注册应用程序的应用程序 ID。

response_type String

返回的响应的类型。

state String

状态参数作为凭据的 oAuthState 属性中的对象传回。

expiration Number

过期时间(以分钟为单位)。

locale String

正在使用的区域设置。

redirect_uri String

重定向 URL 表示成功登录后用户可以重定向到的有效位置。

authorizeUrl String

门户的 OAuth 2.0 授权 URL。

oAuthInfo OAuthInfo

对 OAuthInfo 对象的引用。

resourceUrl String

所访问资源的 URL。

serverInfo ServerInfo

描述承载安全资源的服务器的 ServerInfo 对象。

事件概述

名称 类型 描述
{credential: Credential}
更多信息

在创建凭据时触发。

更多信息 IdentityManager
更多信息

在创建标识管理器对话框时触发。

更多信息 IdentityManager

事件详述

credential-create

在创建凭据时触发。

属性:
credential Credential

返回的凭据。

dialog-create

在创建标识管理器对话框时触发。这用于提示用户输入其凭据。

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.