试图让Thinktecture IdentityServer示例CodeFlowClient工作

时间:2014-02-21 04:25:07

标签: openid claims-based-identity thinktecture-ident-server

我正在查看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

1 个答案:

答案 0 :(得分:1)

首先调用EndRequest - 它启动到OIDC提供程序的往返 - 同时执行该操作会持久保存状态cookie。

OIDC提供程序必须配置为回调回调URL(默认情况下/ oidccallback相对于app root)。

然后调用AuthenticateRequest并回读cookie。