我正在查看 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”吗?
对此的任何帮助将不胜感激,
问候本