我正在尝试设置IdentityServer3,并且正在使用Pluralsight视频(https://app.pluralsight.com/library/courses/building-securing-restful-api-aspdotnet/table-of-contents)作为参考。我正处于IS3基本设置的时候,我被困在“.UseIdentityServer()”调用的“SigningCertificate”分配中。
我在互联网上的其他地方看到过类似的代码。我的相关代码:
public X509Certificate2 LoadCertificate()
{
var baseFolder = AppDomain.CurrentDomain.BaseDirectory;
string certificatePath = $"{baseFolder}Certificates\\idsrv3test.pfx";
//var certificateBytes = File.ReadAllBytes(certificatePath);
//return new X509Certificate2(certificateBytes, "idsrv3test", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.UserKeySet | X509KeyStorageFlags.UserProtected);
return new X509Certificate2(certificatePath, "idsrv3test", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);
}
public void Configuration(IAppBuilder app)
{
app.Map("/identity", idSrvApp =>
{
idSrvApp.UseIdentityServer(new IdentityServerOptions
SiteName = "My Identity Server",
IssuerUri = Constants.IdServerIssuerUri,
Factory = new IdentityServerServiceFactory()
.UseInMemoryUsers(Users.Get())
.UseInMemoryClients(Clients.Get())
.UseInMemoryScopes(Scopes.Get()),
SigningCertificate = LoadCertificate()
});
});
}
return new X509Certificate2()
线正在爆炸。正如您所看到的,我已尝试从路径和字节数组中读取测试证书(从IS3的Github页面下载:https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Certificates)。我还尝试了X509KeyStorageFlags
枚举值中的每一个。两者都给出了这个错误:
[CryptographicException:找不到请求的对象。 ]
System.Security.Cryptography.CryptographicException.ThrowCryptographicException(的Int32 hr)+36
System.Security.Cryptography.X509Certificates.X509Utils._QueryCertFileType(字符串 fileName)+0
System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(字符串 fileName,Object password,X509KeyStorageFlags keyStorageFlags)+100
System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(字符串 fileName,String password,X509KeyStorageFlags keyStorageFlags)+110
MySecurityService.Startup.LoadCertificate()in d:\文件\项目\测试\ MySecurityService \ MySecurityService \ Startup.cs:43 UpcarsSecurityService.Startup.b__0_0(IAppBuilder idSrvApp)in d:\文件\项目\测试\ MySecurityService \ MySecurityService \ Startup.cs:22 Owin.MapExtensions.Map(IAppBuilder应用程序,PathString pathMatch,Action`1 配置)+178 Owin.MapExtensions.Map(IAppBuilder app,String pathMatch,Action1配置)+108
UpcarsSecurityService.Startup.Configuration(IAppBuilder app)中 d:\文件\项目\测试\ MySecurityService \ MySecurityService \ Startup.cs:20
解决方案有一个“Certificates”目录,并且.pfx文件就在那里。在Visual Studio中,我将文件的“复制到输出目录”属性设置为“始终复制”。
我已经花了几个小时在这上面,我真的不知道该怎么做。为了完全清楚,我现在只是通过Visual Studio Debug(IIS Express)在本地计算机上运行它。我计划在完成和部署后在IIS(以及网站)中托管它。我在Windows 10上运行。
非常感谢你的帮助;我很迷失在这里,对IS3来说是全新的。
答案 0 :(得分:4)
哦,为了f。我使用的.pfx文件是40 KB。正如我所说,这最初是从IS3 Github网站下载的。
但是,当我点击Github上的“idsrv3test.pfx”链接时,我才注意到它是3.32 KB。所以我点击右边的“下载”按钮,果然,在磁盘上它是4 KB。
我用新下载的证书取代了证书,瞧!有用。我无法相信我浪费了太多时间来解决这个问题。嗯......实际上,我可以相信它。典型