gpt4 book ai didi

azure - 具有 Microsoft.Owin.Security.OpenIdConnect 和 AzureAD v 2.0 端点的自定义参数

转载 作者:行者123 更新时间:2023-12-01 12:28:08 25 4
gpt4 key购买 nike

我正在将 Azure AD 安全应用程序迁移到 v2.0 端点。

我需要将自定义参数传递给回复 uri。对于以前的 Azure AD 端点,我通过向回复 URL 添加常用的查询参数来完成此操作。 例如https://myserver.com/myredirect_uri?mycustomparamerter=myvalue

不幸的是,对于端点 2.0,我收到一条错误,指出回复 uri 与注册的 uri 不匹配。当然,我的自定义参数值是动态的,我无法对其进行硬编码。

我正在寻找利用“状态”参数 described in OAUTH flow 。但是,我正在使用 Microsoft.Owin.Security.OpenIdConnect 并且看起来该参数已设置,因此我无法利用它。我正在使用基于 MVC 的流程实现,如下所示 this sample .

您能否建议一种解决方法,以便我的服务器在流程启动时设置的回复 URL 中接收自定义参数?

最佳答案

不确定是否有官方方法可以完成您所要求的操作,但您可以通过身份验证流程从技术上注入(inject)和提取额外值的一种方法是通过 OWIN 的通知。

在 Startup.Auth.cs 中,当您设置 OpenIdConnectAuthenticationOptions 时,您需要添加以下内容:

app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
//...
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = OnRedirectToIdentityProvider,
MessageReceived = OnMessageReceived
},
});

并使用 RedirectToIdentityProvider 注入(inject)您的参数,大致如下:

private Task OnRedirectToIdentityProvider(RedirectToIdentityProviderNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
{
var stateQueryString = notification.ProtocolMessage.State.Split('=');
var protectedState = stateQueryString[1];
var state = notification.Options.StateDataFormat.Unprotect(protectedState);
state.Dictionary.Add("mycustomparameter", "myvalue");
notification.ProtocolMessage.State = stateQueryString[0] + "=" + notification.Options.StateDataFormat.Protect(state);
return Task.FromResult(0);
}

然后使用 MessageReceived 来提取它,如下所示:

private Task OnMessageReceived(MessageReceivedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
{
string mycustomparameter;
var protectedState = notification.ProtocolMessage.State.Split('=')[1];
var state = notification.Options.StateDataFormat.Unprotect(protectedState);
state.Dictionary.TryGetValue("mycustomparameter", out mycustomparameter);
return Task.FromResult(0);
}

您显然需要改进/强化这一点,但这应该会让您继续前进,除非有更好的整体方法。

关于azure - 具有 Microsoft.Owin.Security.OpenIdConnect 和 AzureAD v 2.0 端点的自定义参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37489964/

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