4

我正在开发一个受旧版 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的片段。accessid

例子:

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 为空或为空。)

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

我错过了什么?

4

0 回答 0