Claims系列 - Keyset does not exist
部署环境:
Web应用程序部署在IIS7上。
错误现象:
原因分析:
Web应用程序需要对接收到的Security Token的数字签名进行序列化时, 由于运行Web程序的用户没有访问私钥的读权限导致。
解决方案:
1, 用FindPrivateKey.exe工具找出私钥文件名称及路径;
假设已知公钥的thumbprint为“5988a04be6588fe61fae5cfba8d0b28aa27f83ef”,保存位置为Local Machine的My 文件夹;可使用如下命令:
注:FindPrivateKey的使用方法及下载路径为: http://msdn.microsoft.com/en-us/library/aa717039.aspx
2, 查看运行Web应用程序的用户;
打开IIS管理工具,选中出错的Web程序(本例中为Issuer.Web),在右过的Action Pane中点击Basic Settings链接:
在弹出窗口中点击Connect as按钮:
此处选中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:
选中Security选项卡,并点击Continue按钮:
在弹出窗口中点击Add按钮:
在查找窗口中设置Locations为本机名称,在文本框中输入IIS_IUSRS,并点击右侧的Check Names按钮,当完整名称出现后,点击OK按钮。
在权限中选择框中选中Read权限,清空其它选项;并一路OK就行了。