OpenIdConnectAuthenticationHandler问题

问题描述 投票:0回答:1

我正在尝试使用OIDC进行模拟。我知道,这不是一个好主意,但是我对此没有选择。

尽管如此,我基本上是通过篡改acr_values使其正常工作的。您将要看到的代码仅用于测试目的,但是异常消息使我感到好奇。

为了向您展示我的设置,这就是我所拥有的:

services
    .AddAuthentication(options => 
    {
        options.DefaultScheme = "Cookies";
        options.DefaultChallengeScheme = "oidc";
    })
    .AddCookie("Cookies")
    .AddOpenIdConnect("oidc", options => {
        options.Authority = "http://localhost:5000";
        options.RequireHttpsMetadata = false;

        options.ClientId = "test.client";
        options.ClientSecret = "secret";
        options.ResponseType = "id_token token";
        options.Scope.Add("openid");

        options.Events = new OpenIdConnectEvents
        {
            OnRedirectToIdentityProvider = context => 
            {
                context.ProtocolMessage.SetParameter("acr_values", "impersonatedUserId:1234");
                return Task.FromResult(0);
            }
        {
    });

请注意,我使用IdentityServer4作为授权服务器。

这会给我以下异常消息

Exception: OpenIdConnectAuthenticationHandler: message.State is null or empty.

堆栈跟踪并没有真正给我任何有用的信息,因此不需要在这里发布它。

然而,有趣的是,如果我要删除OnRedirectToIdentityProvider事件,除了我无法模拟其他用户这一事实之外,其他一切都正常。

由于我是OAuth和OIDC的新手,所以我对这里实际发生的事情很感兴趣。为什么会抛出此异常,为什么仅在重定向到IDP之前拦截请求时才会发生?此message.State是什么?在哪里可以找到并检查它?还是像大多数具有dotnet核心的OAuth和OIDC一样在幕后?

.net-core oauth identityserver4 openid-connect
1个回答
0
投票

您收到的错误是一般性错误,可能是由于配置错误或网络问题引起的。我建议您在不使用OpenIdConnectEvents拳头的情况下使其端到端工作。然后,要进行模拟,您需要在自定义acr_values中检查IAuthorizeInteractionResponseGeneratorhere是一个示例。

© www.soinside.com 2019 - 2024. All rights reserved.