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 是用 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”吗?

对此的任何帮助将不胜感激,

问候本

4

1 回答 1

1

首先调用 EndRequest - 它启动到 OIDC 提供程序的往返 - 同时它保留状态 cookie。

OIDC 提供程序必须配置为回调回调 URL(默认情况下 /oidccallback 相对于应用根目录)。

然后调用 AuthenticateRequest 并回读 cookie。

于 2014-02-21T08:19:09.040 回答