0

새로운 소식입니다. 누군가가 나에게 도움이 될 수있어, 내 문제에 대해 지금 거의 한달 동안 미쳐 가고있다. ( 간단히 말해서 : 나는 ID 서버 프로젝트, webapi 프로젝트 및 각 클라이언트이다. 클라이언트 요청은 인증을 받고 id_token과 access_token을 얻는다.), access_token은 내가 가진 프로젝트 webapi을 보내WebApi에서 IdentityServer 사용자 인증

var idServerBearerTokenAuthOptions = new IdentityServerBearerTokenAuthenticationOptions { 
      Authority = "https://localhost:11066/IdentityServer/identity", 
      ValidationMode = ValidationMode.ValidationEndpoint, 
      AuthenticationType = "Bearer", 
      RequiredScopes = new[] { "permissions", "openid" }, 
      DelayLoadMetadata = true 
     }; 
app.UseIdentityServerBearerTokenAuthentication(idServerBearerTokenAuthOptions); 

를 내가 나에게 현재 logedin 사용자

builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest(); 
builder.Register(c => new ClaimsIdentityApiUser((ClaimsIdentity)Thread.CurrentPrincipal.Identity)).As<IApiUser>().InstancePerRequest(); 

을 받아야하는 Autofac을 가지고 있지만 Thread.CurrentPrincipal.Identity는 아무런 관계가 없으며, 또한 ClaimsPrincipal 현재. 신원은 아무것도 없다. 내가 무엇을 놓치고 있는가?

p.s. 이 질문에 비슷한 문제가 Protecting webapi with IdentityServer and Autofac - can't get claims하지만 분명히 동일한 솔루션이나 설정되지 않았습니다.

+0

스레드 사용자 대신 HttpContext.User를 보았습니까? –

+0

Travis에게 답해 주셔서 감사합니다. 이것도 컨트롤러 (RequestContext와 같은)에서 사용하기위한 것이라 생각하지만, 나는 owin 파이프 라인에서 사용자를 식별하려고한다. 아니면 내가 틀렸어? (그 경우 나에게 간단한 예를 들어주세요) – theCuriousOne

+0

이것은 분명 할 수 있지만 authorize 속성을 추가 했습니까? 그것 없이는 아무 것도 인증을하지 않고 ID는 null이 될 것입니다. –

답변

0
사용자가 항상 ApiController.User (또는 RequestContext) B)에서 검색해야)

토큰 검증 미들웨어에 대한 로깅을 사용하려면이 리소스를 사용하는 몇 가지 이유로 실패 할 수 있습니다 토큰 유효성 검사 :

https://identityserver.github.io/Documentation/docsv2/consuming/diagnostics.html

c) JWT 또는 참조 토큰을 사용하고 있습니까? JWT의 경우 ValidationMode를 로컬로 설정할 수 있습니다

+0

답장하지만 Dominick에게 감사드립니다. a) owin 파이프 라인 (app.UseIdentityServerBearerTokenAuthentication (idServerBearerTokenAuthOptions) 이후)에서 사용자를 매우 빨리 가져오고 싶습니까? 아니면 불가능합니다 (잘못된 디자인이 있습니까?). b) web.config에서 제안 사항을 추가하려고 시도했지만 로그가 표시되지 않습니다. 파일은 어디에 기록해야합니까? c) 예 JWT 토큰입니다. ValidationMode 로컬로 시도했지만 여전히 동일한 결과이지만 – theCuriousOne

+0

p.s.에 종속됩니다. b) 프로젝트 루트와 솔루션 루트에 수동으로 ** katana.trace.log **를 만들었지 만 아무 것도 기록되지 않습니다. – theCuriousOne

+0

Katana 파이프 라인에서 OwinContext.Authentication.User를 통해 현재 사용 권한에 액세스합니다. 로깅을 위해 - 그냥 표준 .NET 로깅이야 - 당신은 그 일을 할 수 있어야합니다 – leastprivilege

관련 문제