Claims系列 - Keyset does not exist

部署环境:

Web应用程序部署在IIS7上。

 

错误现象:

image

 

原因分析:

Web应用程序需要对接收到的Security Token的数字签名进行序列化时, 由于运行Web程序的用户没有访问私钥的读权限导致。

 

解决方案:

1, 用FindPrivateKey.exe工具找出私钥文件名称及路径;

    假设已知公钥的thumbprint为“5988a04be6588fe61fae5cfba8d0b28aa27f83ef”,保存位置为Local Machine的My 文件夹;可使用如下命令:

image

注:FindPrivateKey的使用方法及下载路径为: http://msdn.microsoft.com/en-us/library/aa717039.aspx

 

2, 查看运行Web应用程序的用户;

    打开IIS管理工具,选中出错的Web程序(本例中为Issuer.Web),在右过的Action Pane中点击Basic Settings链接:

image

在弹出窗口中点击Connect as按钮:

image

此处选中Application user(pass-through authentication),在IIS7中一般默认为IIS_IUSRS组。

 

注:关于IIS7中的内置用户,详细可查看:http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis/

 

3, 将私钥文件的读权限赋给运行Web应用程序的用户;

打开私钥所有文件夹,右击私钥文件,在弹出菜单中点击Properties:

image

选中Security选项卡,并点击Continue按钮:

image

在弹出窗口中点击Add按钮:

image

在查找窗口中设置Locations为本机名称,在文本框中输入IIS_IUSRS,并点击右侧的Check Names按钮,当完整名称出现后,点击OK按钮。

image

在权限中选择框中选中Read权限,清空其它选项;并一路OK就行了。

image

posted @ 2012-08-02 10:35  Rickey Hu  阅读(1793)  评论(1编辑  收藏  举报