第十八章 添加时间戳和用户名令牌

文章目录

第十八章 添加时间戳和用户名令牌

本主题讨论时间戳和用户令牌。

概述

时间戳是 WS-Security 标头中的 <Timestamp> 安全元素。严格来说,时间戳不是安全元素。但是,可以使用它来避免重放攻击。时间戳对于自定义日志记录也很有用。

用户名令牌是 WS-Security 标头中的 <UsernameToken> 安全元素;它带有用户名。它还可以带有相应的密码(可选为摘要形式)。通常使用它进行身份验证,即允许 IRIS Web 客户端使用需要密码的 Web 服务。

注意:默认情况下,WS-Security 标头元素以明文形式发送。要保护 <UsernameToken> 中的密码,应该使用 SSL/TLS、加密 <UsernameToken>(如其他地方所述),或者使用这些技术的某种组合。

添加时间戳

要将时间戳添加到 WS-Security 标头元素,请在 Web 客户端或 Web 服务中执行以下操作:

  1. 调用 %SOAP.Security.Timestamp的 Create() 类方法。此方法需要一个可选参数(以秒为单位的过期间隔)。默认过期间隔为 300 秒。例如:
java 复制代码
 set ts=##class(%SOAP.Security.Timestamp).Create()

此方法创建 %SOAP.Security.Timestamp 的实例,设置其 CreatedExpiresTimestampAtEnd 属性的值,并返回该实例。此实例表示 <Timestamp> 标头元素。

  1. 调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于方法参数,请在创建的实例中使用 %SOAP.Security.Timestamp例如:
java 复制代码
 do client.SecurityOut.AddSecurityElement(ts)
  1. 发送 SOAP 消息。请参阅添加安全标头元素中的一般注释。

如果包含 <Timestamp> 元素,IRIS 会强制它位于 <Security> 中的第一个。

添加用户名令牌

要添加用户名令牌,请在 Web 客户端中执行以下操作:

  1. 可选择包含 %soap.inc 包含文件,它定义了可能需要使用的宏。
  2. 调用 %SOAP.Security.UsernameToken的 Create() 类方法。例如:
java 复制代码
 set user="SYSTEM"
 set pwd="_SYS" 
 set utoken=##class(%SOAP.Security.UsernameToken).Create(user,pwd)

该方法具有可选的第三个参数(类型),用于指定如何将密码包含在用户名令牌中。该参数必须是以下之一:

  • $$$SOAPWSPasswordText --- 以纯文本形式包含密码。这是默认设置。
  • $$$SOAPWSPasswordDigest --- 不包括密码,而是包括其摘要。摘要、Nonce 和创建时间戳均按照 WS-Security 1.1 的规定派生。

重要提示:此选项仅适用于与支持该选项的第三方服务器交互的 SOAP 客户端。PasswordDigest 身份验证要求服务器存储纯文本密码,这在现代安全环境中是不可接受的。PasswordDigest 算法应被视为一项旧功能。要保护 <UsernameToken> 中的密码,应该使用 SSL/TLS、加密 <UsernameToken> 或使用这些技术的某种组合。

  • $$$SOAPWSPasswordNone --- 不包括密码。

此方法创建 %SOAP.Security.UsernameToken 的实例,设置其用户名和密码属性,并返回该实例。此对象表示 <UsernameToken> 标头元素。

  1. 调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于方法参数,请在创建的实例中使用 %SOAP.Security.UsernameToken例如:
java 复制代码
 do client.SecurityOut.AddSecurityElement(utoken)
  1. 发送 SOAP 消息。请参阅添加安全标头元素中的一般注释。
相关推荐
秋已杰爱几秒前
Redis分布式锁
数据库·redis·分布式
盛夏绽放5 小时前
jQuery 知识点复习总览
前端·javascript·jquery
胡gh7 小时前
依旧性能优化,如何在浅比较上做文章,memo 满天飞,谁在裸奔?
前端·react.js·面试
haogexiaole7 小时前
Redis优缺点
数据库·redis·缓存
在未来等你7 小时前
Redis面试精讲 Day 27:Redis 7.0/8.0新特性深度解析
数据库·redis·缓存·面试
程序员 _孜然7 小时前
Ubuntu/Debian修改网卡名字enP3p49s0为eth0
linux·运维·驱动开发·嵌入式硬件·ubuntu·debian
大怪v7 小时前
超赞👍!优秀前端佬的电子布洛芬技术网站!
前端·javascript·vue.js
胡gh7 小时前
你一般用哪些状态管理库?别担心,Zustand和Redux就能说个10分钟
前端·面试·node.js
IDIOT___IDIOT7 小时前
Linux mount 命令
linux·运维·服务器
新法国菜9 小时前
MySql知识梳理之DML语句
数据库·mysql