2016-08-28 3 views
1

IdentityServer3 설정을 얻으려고하고 있으며 Pluralsight 비디오 (https://app.pluralsight.com/library/courses/building-securing-restful-api-aspdotnet/table-of-contents)를 참조로 사용하고 있습니다. 나는 기본 IS3 설정의 시점에 있으며 ".UseIdentityServer()"호출에 대한 "SigningCertificate"할당에 붙어 있습니다.IdentityServer3 - X509Certificate2 생성자 오류 ("요청한 객체를 찾을 수 없습니다")

나는 인터넷의 다른 곳에서도 비슷한 코드를 보았습니다. 내 관련 코드 :

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: Cannot find the requested object. ]
System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) +36
System.Security.Cryptography.X509Certificates.X509Utils._QueryCertFileType(String fileName) +0
System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags) +100
System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password, X509KeyStorageFlags keyStorageFlags) +110
MySecurityService.Startup.LoadCertificate() in D:\Documents\Projects\Test\MySecurityService\MySecurityService\Startup.cs:43 UpcarsSecurityService.Startup.b__0_0(IAppBuilder idSrvApp) in D:\Documents\Projects\Test\MySecurityService\MySecurityService\Startup.cs:22 Owin.MapExtensions.Map(IAppBuilder app, PathString pathMatch, Action`1 configuration) +178 Owin.MapExtensions.Map(IAppBuilder app, String pathMatch, Action1 configuration) +108
UpcarsSecurityService.Startup.Configuration(IAppBuilder app) in D:\Documents\Projects\Test\MySecurityService\MySecurityService\Startup.cs:20

솔루션에는 "인증서"디렉토리가 있으며 .pfx 파일이 있습니다. Visual Studio에서 파일의 "Copy to Output Directory"속성을 "Copy always"로 설정했습니다.

나는 이것에 대해 몇 시간을 보냈는데 무엇을해야할지 잘 모릅니다. 그냥 완전히 명확하게하기 위해,이 시점에서 Visual Studio Debug (IIS Express)를 통해 로컬 컴퓨터에서이 프로그램을 실행하고 있습니다. IIS가 완료되고 배포 될 때 IIS (웹 사이트 옆)에서 호스팅 될 예정입니다. Windows 10에서 실행됩니다.

감사합니다. 나는 여기서 꽤 잃어 버렸고 완전히 IS3에 익숙합니다.

+0

음 ... IS3 Github 인증서 페이지 (https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Certificates)의 가이드에 따라이 테스트 인증서를 설치하려고 시도했습니다. 그리고 6 단계에서이 "파일 유형을 인식 할 수 없음"오류가 발생합니다 : http://i.imgur.com/UXwZ4v4.png). 그리고 이것은 Github 페이지에서 바로 다운로드되었습니다. 다음에 ".cer"파일을 시도해 보겠습니다 ... – clamum

답변

3

오. 내가 사용하고 있던 .pfx 파일은 40KB입니다. 제가 말씀 드렸다시피, 이것은 원래 IS3 Github 사이트에서 다운로드되었습니다.

그러나 Github에서 "idsrv3test.pfx"링크를 클릭하면 나타났습니다.이 링크는 3.32KB라고 말했습니다. 그래서 나는 오른쪽에 "Download"버튼을 클릭했고, 디스크에는 4KB가 충분했다.

인증서를 새로 다운로드 한 인증서로 바 꾸었습니다. 그것은 작동합니다. 나는이 asinine 문제에 너무 많은 시간을 낭비했다는 것을 믿을 수 없다. 글쎄 ... 사실, 나는 그것을 믿을 수있다. 전형적인.

+0

어떻게 든 나에게 이런 일이 일어났습니다. – Bryan

관련 문제