用Kerberos为J2ME应用程序上锁,第2部分 - 生成一个Kerberos票据请求 - 编程入门网
符串传递给 getTagAndLengthBytes() 方法,这个方法返回 kdc-options 字段的完整 ASN.1 字节数组表达。
下一步是生成 cname 结构。在 第一篇文章 清单 1 的讨论中说过, cname 字段的类型为 type cname 。这种数据类型是两个字段 - 即 name-type 和 name-string ―― 的 SEQUENCE 。 name-type 字段是用一个 INTEGER 构造的。 name-string 字段是 GeneralString s 的一个 SEQUENCE 。 因此,为了生成 cname 结构,我必须遵循清单 12 的 getTicketResponse() 方法中的几个步骤: 调用 getGeneralStringBytes() 方法,同时传递客户的用户名。 getGeneralStringBytes() 方法将 返回客户的用户名的 GeneralString 表达。 向 getSequenceBytes() 方法传递 GeneralString ,这个方法会在 GeneralString 前面附加 SEQUENCE 字节并返回包含客户的用户名字符串的 SEQUENCE 的 ASN.1 表达。 byte generalStringSequence[] = getSequenceBytes (getGeneralStringBytes (userName)); 这一 行执行这前两步。 调用 getTagAndLengthBytes() 方法,传递 SEQUENCE 字节作为其内容。 getTagAndLengthBytes() 方法会在 SEQUENCE 前面附加 name-string 标签字节(上下文特定的标签数字 0)以及长度字节,并返 回完整的 name-string 结构。 用Kerberos为J2ME应用程序上锁,第2部分 - 生成一个Kerberos票据请求(14)时间:2011-08-05 IBM Faheem Khanbyte name_string[] = getTagAndLengthBytes (ASN1DataTypes.Context_Specific, 1, generalStringSequence); 这一行执行这一步。 生成 PrincipalName 的 name-type 部分。 name-type 部分只包含一个 INTEGER ,它标识了用户名 的类型。Kerbros 允许几种类型的名字(用户名、惟一标识等等)。对于这个基于 J2ME 的 Kerberos 客 户机,我感兴趣的惟一名称类型是用户名,它的名称类型标识是 1。因此,我将首先构造一个 INTEGER ,然后向 getTagAndLengthBytes() 方法传递这个 INTEGER 字节。这个方法生成 PrincipalName 的完整 name-type 部分。清单 12 中 byte name_type[] = getTagAndLengthBytes (ASN1DataTypes.Context_Specific, 0, getIntegerBytes (ASN1DataTypes.NT_PRINCIPAL)); 这一行执 行这项任务。 将 PrincipalName 的 name-type 和 name-string 部分串接到一起,然后在串接字节数组前面附加 SEQUENCE 字节。 byte principalNameSequence [] = getSequenceBytes (concatenateBytes (name_type, name_string)); 一行执行这项任务。 在上面第 5 步的 SEQUENCE 前面附加 cname 标签字节(上下文特定的标签数 1)和长度字节。这样 就得到了完整的 cname 结构。 byte cname[] = getTagAndLengthBytes (ASN1DataTypes.Context_Specific, 1, principalNameSequence); 一行执行这项任务。 上述 6 步策略就可以生成完整的 cname 结构。 我的下一步是生成 realm 字段,它的类型为 GeneralString 。生成 realm 字段的策略如下: 用 getGeneralStringBytes() 方法调用生成 GeneralString 。 连同 getTagAndLengthBytes() 方法一起传递 GeneralString 字节,它会返回 realm 字段的完整字 节字符串表达。 清单 12 中 byte realm[] = getTagAndLengthBytes (ASN1DataTypes.Context_Specific, 2, getGeneralStringBytes (realmName)); 这一行进行这两个方法调用。 下一项任务是生成 sname 字段,它是 PrincipalName 数据类型。我已经在上面讨论 cname 字段时描 述过了生成 PrincipalName 数据结构的策略。 在 sname 字段后,我需要生成 till 字段,它指定我所请求的票据的失效时间。对于这个基于 J2ME 的 Kerberos 客户机,我不想指定票据的任何特定失效时间,我只希望由 KDC 服务器根据服务 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |