如何在Owin Middleware中处理openid连接响应作为片段?

时间:2017-04-29 08:58:57

标签: c# asp.net-mvc openid-connect asp.net-core-1.0 owin-middleware

我正在开发受传统openid连接服务器保护的Web端点, 客户端网站(startup.cs)上的配置如下:

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
     AuthenticationScheme = "oidc",   
     SignInScheme = "Cookies",   
     ClientId = "client1", 
     GetClaimsFromUserInfoEndpoint = false,
     ProtocolValidator = new OpenIdConnectProtocolValidator() { 
                             RequireStateValidation=false, RequireState=false },
     ResponseType = "token id_token",
     ResponseMode= OpenIdConnectResponseMode.Fragment,
     Configuration = new OpenIdConnectConfiguration() { 
                         AuthorizationEndpoint = "https://server/oauth/v2/authorize" }, 
     RequireHttpsMetadata = false, 
     SaveTokens = false 
});  

我不得不将response_type设置为令牌id_token

在请求受[Authorize]属性保护的端点后,我正确地被重定向到授权服务器,授权服务器为用户提供登录表单。 用户登录后,授权服务器会向客户网站返回302,并附加包含access令牌和id令牌的片段。

示例:

https://localhost:44341/signin-oidc#access_token=384b1c07-4a59-41e3-894f-266e46680f0c
&expires_in=3600
&token_type=Bearer
&id_token=<random_jwt>
&id_token_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&state=CfDJ8JU8TffTfA9Jnq6JVvmsltccnGVaA_IX4LQhGjz_n3f0NMqSBfcdctjtUAtDpCN7F4Wy9pqq8ikQo-KVpaQlOnOwPpqZWUDWfKeLvOeFQ9-GI6eq1RbE_13Hrtdwm1Ijy0N7nwmbuO47uK_Zg0NfzcfngHVvfUB0ccrAAE79EcKVaiuXXcwCQwtflsp1kFdCou4aJVY9zo2-w_wwTJpEuyw_c-WulPD3bY8ZQLiGpmt8Wao9VQsBmOBoMB-zCBf9o4ot2jloyqpnXamOx6mCFvWizxILvXVH1pbYEc58SFRKe4MSW3png8xSqTdN1gZ6iKBy6BPtq_v5XLsbL68cCng
&scope=openid

我从openidconnect中间件(Web客户端)收到错误说:

  

OpenIdConnectAuthenticationHandler:message.State为null或为空。   AggregateException:未处理的远程故障。   ...   (OpenIdConnectAuthenticationHandler:message.State为null或   空。)

错误很明显,它确实找不到状态参数,因为它不再存在于查询字符串中,而是存在于片段上。但是我明确地将其设置为期望片段中的响应。即使这不起作用,我也设置了跳过状态验证的选项,但它也没有工作。

我错过了什么?

0 个答案:

没有答案