我正在查看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”?
非常感谢任何帮助,
关心Ben
答案 0 :(得分:1)
首先调用EndRequest - 它启动到OIDC提供程序的往返 - 同时执行该操作会持久保存状态cookie。
OIDC提供程序必须配置为回调回调URL(默认情况下/ oidccallback相对于app root)。
然后调用AuthenticateRequest并回读cookie。