第三十九章 创建安全对话

文章目录

第三十九章 创建安全对话

IRIS 支持安全对话,遵循 WS-SecureConversation 1.3 规范。本页介绍如何手动创建安全对话。

概述

在安全对话中,Web 客户端向 Web 服务发出初始请求并接收包含 <SecurityContextToken> 的消息。此元素包含双方都可以使用的对称密钥的信息。此信息指的是只有双方知道的共享密钥。然后双方可以在后续交换中使用对称密钥,直到令牌过期或客户端取消令牌。

双方不应该直接使用 <SecurityContextToken> 执行这些任务(不推荐),而应该从中生成一个 <SecurityContextToken>,然后使用它进行加密、签名、解密和签名验证。

共享密钥可以通过以下任一方式指定:

  • 双方共同提供随机熵值。这是典型的情况。
  • 由客户端,如果客户端提供了一个随机的客户端熵值。
  • 由服务提供,如果服务提供了随机的服务熵值。

开始安全对话

Web 客户端启动安全对话。要在 IRIS 中执行此操作,请在 Web 客户端中执行以下操作:

  1. 加密 SOAP 主体。客户端发送的请求包含必须保护的信息;此信息在 SOAP 主体中携带。

根据需要,可以选择采用其他方式保护请求消息。

  1. 在调用 %SOAP.WST.EntropyCreateBinarySecret() 方法。此方法返回表示随机客户端熵的该类的实例。该方法接受一个参数,即熵的大小(以字节为单位)。
java 复制代码
 set clientEntropy=##class(%SOAP.WST.Entropy).CreateBinarySecret(32)

该实例表示 <Entropy> 元素和其中包含的 <BinarySecret>

  1. 在调用 %SOAP.WST.RequestSecurityTokenCreateIssueRequest() 类方法。此方法返回此类的一个实例,客户端将使用该实例请求安全对话。该方法具有以下参数:

a. Interval间隔,请求的令牌的生命周期。默认值为 300 秒;使用空字符串则不指定生命周期。

b. clientEntropy,在上一步中创建的客户端熵对象(如果适用)。

c. requireServerEntropy,一个布尔值,指定服务器在创建 <SecurityContextToken>时是否必须使用服务器熵。默认值为 false

java 复制代码
 set RST=##class(%SOAP.WST.RequestSecurityToken).CreateIssueRequest(300,clientEntropy,1)
  1. 可以选择实例中指定 %SOAP.WST.RequestSecurityTokenComputedKeySize 属性。
  2. 调用 Web 客户端的 StartSecureConversation() 方法。此方法向 Web 服务发送一条消息,请求双方都可以使用的 <SecurityContextToken>。此方法接受一个参数,即上一步中在中打开的 %SOAP.WST.RequestSecurityToken实例。

此方法返回一个状态代码,代码应该检查该代码。如果响应表示成功,则客户端的 SecurityContextToken 属性包含一个 %SOAP.WSSC.SecurityContextToken 实例,该实例表示从客户端返回的 <SecurityContextToken>。此元素包含有关对称密钥的信息,双方都可以使用该密钥进行加密、签名、解密和签名验证。

  1. 使用 <SecurityContextToken> 根据需要重新指定安全标头。请参阅使用 <SecurityContextToken>
java 复制代码
  //encrypt the SOAP body because it contains part of the shared secret key
  Set x509alias = "servernopassword" 
  Set cred = ##class(%SYS.X509Credentials).GetByAlias(x509alias)
  set enckey=##class(%XML.Security.EncryptedKey).CreateX509(cred)
  do client.SecurityOut.AddSecurityElement(enckey)
 
  // if client entropy to be passed
  set entropy=##class(%SOAP.WST.Entropy).CreateBinarySecret(32)
  // request with 300 second lifetime and computed key using both client 
  //and server entropy.
  set RST=##class(%SOAP.WST.RequestSecurityToken).CreateIssueRequest(300,entropy,1)
  set sc=client.StartSecureConversation(RST)  ; sends a SOAP message
相关推荐
小徐学编程-zZ1 天前
量产测试数据
python·压力测试·数据库架构
QQ8057806511 天前
django基于机器学习的电商评论情感分析系统设计实现
python·机器学习·django
wx09091 天前
stata实现机器学习的环境配置
python·机器学习·stata
不会敲代码11 天前
手写 Zustand:三十分钟带你搞懂状态管理库的核心原理
前端·javascript·源码
神奇的程序员1 天前
重构了自己5年前写的截图插件
前端·javascript·架构
大神科技AI定制1 天前
企业级OpenClaw落地指南:如何通过私有化部署构建安全AI Agent工作流?
人工智能·安全
UXbot1 天前
一人独立交付 UI + 前端:AI 驱动 UI 设计工具的五大功能模块深度评测
前端·低代码·ui·设计模式·交互
kobesdu1 天前
【ROS2实战笔记-19】ROS2 生命周期节点的启动顺序、状态转换陷阱与热备方案
java·前端·笔记·机器人·ros·ros2
nuowenyadelunwen1 天前
CS 61A Lab 2 笔记:短路求值、高阶函数与 Lambda 表达式
python·函数式编程·cs61a·berkeley
诚实可靠王大锤1 天前
React Native 输入框与按钮焦点冲突解决方案(rn版本0.70.3)
前端·javascript·react native·react.js