1

OIDC 솔루션의 Thinktecture IdentityServer CodeFlowClient 샘플을 살펴 보았습니다. 나는 달리는 데 어려움을 겪고있다. Thinktecture.IdentityModel.Oidc 프로젝트에 정의 된 OpenIdConnectAuthenticationModule을 사용합니다. 이 클래스 내에서 쿠키에서 oidcstate를 읽는 데 문제가 있습니다. 다음 코드를 참조하십시오.Thinktecture IdentityServer 샘플 CodeFlowClient 작동 시도

// read and parse state cookie 
var cookie = new ProtectedCookie(ProtectionMode.MachineKey); 
var storedState = cookie.Read("oidcstate"); 
ProtectedCookie.Delete("oidcstate"); 

var separator = storedState.IndexOf('_'); 

변수 storedState의 값은 null입니다. 내가 헷갈리는 부분은 oidcstate가 AuthenticateAsync 후에 호출되는 OnEndRequest로 작성된다는 점이다. AuthenticateAsync에는 쿠키 읽기 코드가 있습니다. 아래 OnEndRequest의 코드를 참조하십시오.

var cookie = new ProtectedCookie(ProtectionMode.MachineKey); 
cookie.Write("oidcstate", state + "_" + returnUrl, DateTime.UtcNow.AddHours(1)); 

oidcstate가 어디에 쓰여지는 곳이 없으므로 내가 잘못했는지 모른다. 그것이 읽히기 전에 어떻게 oidcstate를 쓸 수 있습니까?

iodcClient 구성의 appRelativeCallbackUrl 필드는 무엇입니까? 기본값은 "~/oidccallback"입니다. AuthenticateAsync에서는 AppRelativeCurrentExecutionFilePath 요청과 비교됩니다. 아래 코드를 참조하십시오.

var appRelativeCallbackUrl = config.AppRelativeCallbackUrl; 
if (context.Request.AppRelativeCurrentExecutionFilePath.Equals(appRelativeCallbackUrl, StringComparison.OrdinalIgnoreCase)) 
{ 

값이 "~/Home"이어야합니까?

이에 어떤 도움을 크게 감상 할 수있다,

감사 벤

답변

1

EndRequest 이벤트는 처음이라고합니다 - 그것은 OIDC 제공자에게 왕복을 시작 -이 상태 쿠키를 지속 것을하는 동안.

OIDC 공급자는 콜백 URL을 콜백하도록 구성되어야합니다 (기본적으로/root에 대한 oidccallback).

그런 다음 AuthenticateRequest가 호출되고 쿠키가 다시 읽혀집니다.

+0

답장을 보내 주셔서 감사합니다. 나는 Authorize 속성을 가진 Home/Claims가 아닌 다른 페이지를 브라우징했기 때문에 길을 잃었다. – user3221987