我正在开发一个受旧版 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 为空或为空。)
错误很明显,它确实找不到状态参数,因为它不再在查询字符串中,而是在片段中。但是,我明确地将其设置为期望片段中的响应。即使这不起作用,我也设置了一个选项来跳过状态验证,但它也不起作用。
我错过了什么?