1

OIDC ソリューションの Thinktecture IdentityServer CodeFlowClient サンプルを見ています。実行できなくて困っています。Thinktecture.IdentityModel.Oidc プロジェクトで定義されている OpenIdConnectAuthenticationModule を使用します。このクラス内で、cookie からの oidcstate の読み取りに問題があります。次のコードを参照してください。

// 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 には 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」の値を持つ必要がありますか?

これについての助けをいただければ幸いです。

よろしくベン

4

1 に答える 1

1

EndRequest が最初に呼び出され、OIDC プロバイダーへのラウンドトリップが開始されます。その間、状態 Cookie が保持されます。

OIDC プロバイダーは、コールバック URL でコールバックするように構成する必要があります (既定では、アプリ ルートに関連する /oidccallback)。

その後、AuthenticateRequest が呼び出され、Cookie が読み戻されます。

于 2014-02-21T08:19:09.040 に答える