gpt4 book ai didi

asp.net-mvc - AuthorizationCodeReceived 事件未触发

转载 作者:行者123 更新时间:2023-12-02 23:09:33 25 4
gpt4 key购买 nike

我正在尝试在 ASP.NET MVC 5(.Net Framework)应用程序中实现 OpenId Connect 中间件。

在我的 AccountController.cs 中,我发送 OpenID Connect 登录请求。我实现了另一个 OpenId 连接中间件,这就是为什么我指定我想要挑战的中间件是“AlternateIdentityProvider”。

    public void SignIn()
{
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties { RedirectUri = "/" },
"AlternateIdentityProvider");
}

对中间件发出质询后,Startup.cs 中的 RedirectToIdentityProvider 事件会触发,我会被重定向到提供程序进行登录。但是,成功登录后我被重定向到指定的重定向 uri,并将状态和代码参数添加为查询参数,即 http://localhost:63242/singin-oidc/?state=State&code=AuthorizationCode (为简洁起见,删除了参数),这会导致 404,因为我的应用程序中不存在这样的路由。

相反,我希望成功登录能够触发 AuthorizationCodeReceived 事件,我可以在其中实现我的附加逻辑。事实上,其他事件都不会触发。

我在 ASP.Net Core 2.1 中实现了几乎相同的解决方案,在这里我能够在触发不同事件时单步执行它们。

我当前的Startup.cs的相关代码如下所示。请注意,如果初始请求包含 reponse_mode 和一些遥测参数,OpenId 提供程序会引发错误,因此这些参数会在初始 RedirectToIdentityProvider 事件期间被删除。

知道为什么中间件没有接收到来自 OpenId 提供商的回调吗?

        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

app.UseCookieAuthentication(new CookieAuthenticationOptions());

app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions("AlternateIdentityProvider")
{
ClientId = { { Client Id } },
ClientSecret = { { Client Secret } },
Scope = OpenIdConnectScope.OpenId,
ResponseType = OpenIdConnectResponseType.Code,
RedirectUri = "http://localhost:63242/singin-oidc",
MetadataAddress = { { Discovery document url } },

Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = context =>
{
Debug.WriteLine("Redirecting to identity provider for sign in..");

context.ProtocolMessage.EnableTelemetryParameters = false;
context.ProtocolMessage.ResponseMode = null;

return Task.FromResult(0);
},

AuthorizationCodeReceived = context => {

Debug.WriteLine("Authorization code received..");
return Task.FromResult(0);
},

SecurityTokenReceived = context =>
{
Debug.WriteLine("Token response received..");
return Task.FromResult(0);
},

SecurityTokenValidated = context =>
{
Debug.WriteLine("Token validated..");
return Task.FromResult(0);
},
}
});

最佳答案

我也遇到了同样的问题。我正在尝试将 Owin 插入到我们的旧版 WebForms 应用程序中。

对我来说,我必须执行以下操作:

1) 更改 Azure 上应用程序定义的应用程序 list ,将“oauth2AllowIdTokenImplicitFlow”属性从 false 设置为 true

  1. 转到Azure 门户
  2. 选择Azure Active Directory
  3. 选择应用注册
  4. 选择您的应用。
  5. 点击 list
  6. 找到值 oauth2AllowIdTokenImplicitFlow 并将其值更改为 true
  7. 点击保存

2) 在startup.cs 文件中,更改以下内容:

ResponseType = OpenIdConnectResponseType.Code

ResponseType = OpenIdConnectResponseType.CodeIdToken

有一次,我做了这两件事,SecurityTokenValidated 和 AuthorizationCodeReceived 开始触发。

不过,我不确定这是否是正确的方法。需要多读书。

希望这有帮助。

关于asp.net-mvc - AuthorizationCodeReceived 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53762270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com