Package org.ietf.jgss

Interface GSSName


public interface GSSName
这个接口封装了单个GSS-API主体实体。应用程序通过GSSManager类中存在的createName方法之一来获取此接口的实现。在概念上,GSSName包含实体的许多表示或许多原始名称元素,每个支持的底层机制一个。在GSS术语中,包含来自一个机制的元素的GSSName称为机制名称(MN)。

由于不同的身份验证机制可能使用不同的命名空间来标识其主体,GSS-API的命名支持在多机制环境中(甚至在一些支持多个命名空间的单一机制环境中)必然是复杂的。不同的名称格式及其定义通过Oid进行标识,并且在此接口中定义了一些标准类型。名称的格式可以根据其名称类型的唯一Oid派生。

以下包含了使用GSSName接口的代码示例。下面的代码创建一个GSSName,将其转换为MN,执行比较,获取名称的可打印表示,将其导出为字节数组,然后重新导入以获取新的GSSName

      GSSManager manager = GSSManager.getInstance();

      // create a host based service name
      GSSName name = manager.createName("service@host",
                   GSSName.NT_HOSTBASED_SERVICE);

      Oid krb5 = new Oid("1.2.840.113554.1.2.2");

      GSSName mechName = name.canonicalize(krb5);

      // the above two steps are equivalent to the following
      GSSName mechName = manager.createName("service@host",
                      GSSName.NT_HOSTBASED_SERVICE, krb5);

      // perform name comparison
      if (name.equals(mechName))
              print("Names are equals.");

      // obtain textual representation of name and its printable
      // name type
      print(mechName.toString() +
                      mechName.getStringNameType().toString());

      // export and re-import the name
      byte [] exportName = mechName.export();

      // create a new name object from the exported buffer
      GSSName newName = manager.createName(exportName,
                      GSSName.NT_EXPORT_NAME);

 
如果安装了安全管理器,则为了创建包含Kerberos名称元素但未提供其领域的GSSName,必须授予ServicePermission,并且权限的服务主体必须至少在Kerberos名称元素的领域内。例如,如果createName("user", NT_USER_NAME)的结果包含Kerberos名称元素user@EXAMPLE.COM,则必须授予具有服务主体host/www.example.com@EXAMPLE.COM(以及任何操作)的ServicePermission。否则,创建将抛出包含GSSException.FAILURE错误代码的GSSException
自从:
1.4
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final Oid
    用于表示匿名实体的名称类型。
    static final Oid
    用于指示由导出方法生成的导出名称的名称类型。
    static final Oid
    表示基于主机的服务名称形式的Oid。
    static final Oid
    用于指示对应于本地系统上用户的数字用户标识符的名称类型。
    static final Oid
    用于指示表示本地系统上用户的数字用户标识符的数字字符串的名称类型。
    static final Oid
    用于指示本地系统上命名用户的名称类型。
  • Method Summary

    Modifier and Type
    Method
    Description
    canonicalize(Oid mech)
    为某个机制创建一个经过规范化的名称。
    boolean
    equals(Object another)
    将此GSSName对象与可能是GSSName的另一个对象进行比较。
    boolean
    equals(GSSName another)
    比较两个GSSName对象,以确定它们是否引用相同的实体。
    byte[]
    export()
    返回机制名称(MN)的规范连续字节表示,适合由授权函数进行直接逐字节比较。
    Oid
    返回可从toString方法获取的名称的可打印表示的名称类型。
    int
    返回此GSSName的哈希码值。
    boolean
    测试此名称对象是否表示匿名实体。
    boolean
    isMN()
    测试此名称对象是否表示机制名称(MN)。
    返回GSSName对象的文本表示。
  • Field Details

    • NT_HOSTBASED_SERVICE

      static final Oid NT_HOSTBASED_SERVICE
      表示基于主机的服务名称形式的Oid。用于表示与主机计算机关联的服务。此名称形式使用两个元素“service”和“hostname”构造,如下:service@hostname。

      它表示以下Oid值:
      { iso(1) member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) generic(1) service_name(4) }

    • NT_USER_NAME

      static final Oid NT_USER_NAME
      用于指示本地系统上命名用户的名称类型。

      它表示以下Oid值:
      { iso(1) member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) generic(1) user_name(1) }

    • NT_MACHINE_UID_NAME

      static final Oid NT_MACHINE_UID_NAME
      用于指示对应于本地系统上用户的数字用户标识符的名称类型(例如Uid)。

      它表示以下Oid值:
      { iso(1) member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) generic(1) machine_uid_name(2) }

    • NT_STRING_UID_NAME

      static final Oid NT_STRING_UID_NAME
      用于指示表示本地系统上用户的数字用户标识符的数字字符串的名称类型。

      它表示以下Oid值:
      { iso(1) member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) generic(1) string_uid_name(3) }

    • NT_ANONYMOUS

      static final Oid NT_ANONYMOUS
      用于表示匿名实体的名称类型。

      它表示以下Oid值:
      { 1(iso), 3(org), 6(dod), 1(internet), 5(security), 6(nametypes), 3(gss-anonymous-name) }

    • NT_EXPORT_NAME

      static final Oid NT_EXPORT_NAME
      用于指示由导出方法生成的导出名称的名称类型。

      它表示以下Oid值:
      { 1(iso), 3(org), 6(dod), 1(internet), 5(security), 6(nametypes), 4(gss-api-exported-name) }

  • Method Details

    • equals

      boolean equals(GSSName another) throws GSSException
      比较两个GSSName对象,以确定它们是否引用相同的实体。
      参数:
      another - 要与此名称进行比较的GSSName
      返回:
      如果两个名称至少包含一个共同的原始元素,则返回true。如果任何一个名称表示匿名实体,则该方法将返回false。
      抛出:
      GSSException - 当无法比较名称时,包含以下主要错误代码:GSSException.BAD_NAMETYPEGSSException.FAILURE
    • equals

      boolean equals(Object another)
      将此GSSName对象与可能是GSSName的另一个对象进行比较。行为与equals中的完全相同,只是不会抛出GSSException;而是在发生错误的情况下返回false。
      覆盖:
      equals 在类 Object
      参数:
      another - 要将此名称与之比较的对象
      返回:
      如果要比较的对象也是GSSName,并且两个名称引用相同的实体,则返回true。
      参见:
    • hashCode

      int hashCode()
      返回此GSSName的哈希码值。
      覆盖:
      hashCode 在类 Object
      返回:
      一个哈希码值
      参见:
    • canonicalize

      GSSName canonicalize(Oid mech) throws GSSException
      创建一个为某个机制规范化的名称。
      参数:
      mech - 请求名称的规范化形式的机制的oid。
      返回:
      包含表示所需机制的名称的规范化形式的一个原始元素的GSSName
      抛出:
      GSSException - 包含以下主要错误代码:GSSException.BAD_MECHGSSException.BAD_NAMETYPEGSSException.BAD_NAMEGSSException.FAILURE
    • export

      byte[] export() throws GSSException
      返回机制名称(MN)的规范连续字节表示,适合授权函数直接进行逐字节比较。如果名称不是MN,则实现可能会抛出带有NAME_NOT_MN状态代码的GSSException。如果实现选择不抛出异常,则应使用一些特定于系统的默认机制来规范化名称,然后导出它。从结构上看,导出的名称对象包括一个包含标识验证名称的机制的OID的标头,以及包含名称本身的尾部,其中尾部的语法由各个机制规范定义。输出缓冲区的标头格式在RFC 2743中指定。

      导出的名称在大型访问控制列表中非常有用,其中在ACL中为每个名称创建一个GSSName对象的开销以及对ACL中每个名称调用equals方法的开销可能是禁止的。

      可以通过使用字节数组工厂方法GSSManager.createName并指定NT_EXPORT_NAME作为名称类型对象标识符来重新导入导出的名称。结果的GSSName名称也将是MN。

      返回:
      包含导出名称的byte[]。RFC 2743为这些字节定义了“机制独立导出名称对象格式”。
      抛出:
      GSSException - 包含以下主要错误代码:GSSException.BAD_NAMEGSSException.BAD_NAMETYPEGSSException.FAILURE
    • toString

      String toString()
      返回GSSName对象的文本表示。要检索打印名称格式,确定返回字符串的语法,请使用getStringNameType方法。
      覆盖:
      toString 在类 Object
      返回:
      以可打印形式表示此名称的字符串。
    • getStringNameType

      Oid getStringNameType() throws GSSException
      返回可从toString方法获得的此名称的可打印表示的名称类型。
      返回:
      代表从toString方法返回的名称的命名空间的Oid。
      抛出:
      GSSException - 包含以下主要错误代码:GSSException.FAILURE
    • isAnonymous

      boolean isAnonymous()
      测试此名称对象是否表示匿名实体。
      返回:
      如果这是匿名名称,则为true,否则为false。
    • isMN

      boolean isMN()
      测试此名称对象是否表示机制名称(MN)。MN是包含恰好一个机制的原始名称元素的GSSName。
      返回:
      如果这是MN,则为true,否则为false。