快速业务通道

用Kerberos为J2ME应用程序上锁,第2部分 - 生成一个Kerberos票据请求 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
符串传递给 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 Khan

byte 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号