1

我正在查看OIDC解決方案中的Thinktecture IdentityServer CodeFlowClient示例。我無法運行它。它使用Thinktecture.IdentityModel.Oidc項目中定義的OpenIdConnectAuthenticationModule。在這個課堂上,我從Cookie中讀取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是在OnEndRequest中編寫的,後者在AuthenticateAsync之後調用。 AuthenticateAsync具有Cookie讀取代碼。請參閱下面的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提供商 - 而這樣做,它仍然存在狀態的cookie。

必須將OIDC提供程序配置爲回調回調URL(默認情況下爲相對於應用程序根目錄的oidccallback)。

然後調用AuthenticateRequest並回讀cookie。

+0

謝謝你的回答。我迷路了,因爲我正在瀏覽其他頁面,而不是擁有Authorize屬性的Home/Claims。 – user3221987