使用 C# 以编程方式向 MVC 控制器验证 Azure Ad/OpenId 并获取重定向 uri

Posted

技术标签:

【中文标题】使用 C# 以编程方式向 MVC 控制器验证 Azure Ad/OpenId 并获取重定向 uri【英文标题】:Programatically authenticate AzureAd/OpenId to an MVC controller using C# and get redirect uri 【发布时间】:2016-05-22 11:24:54 【问题描述】:

我已经覆盖了内置的 WebClient,如下所示。那我就叫它

public class HttpWebClient : WebClient

    private Uri _responseUri;

    public Uri ResponseUri
    
        get  return _responseUri; 
    

    protected override WebResponse GetWebResponse(WebRequest request)
    
        WebResponse response = base.GetWebResponse(request);

        _responseUri = response.ResponseUri;

        return response;
    

然后我像这样消费它:

using (HttpWebClient client = new HttpWebClient())

    client.Headers[HttpRequestHeader.Authorization] = $"Bearer  _token ";                    
    client.Headers[HttpRequestHeader.ContentType] = "application/json";
    client.UploadData(_url, Encoding.UTF8.GetBytes(_data));

    string queryString = client.ResponseUri.Query.Split('=').Last();

返回的响应 uri 带有“https://login.microsoftonline”,而不是带有查询字符串的 MVC 控制器返回的 url,因为它首先使用 AzureAd/OpenId 使用该承载令牌进行身份验证。如果我调用它两次,它会返回原始 _url 但不是重定向的。如果我删除 AzureAd 身份验证,它可以正常工作。有没有办法强制响应 uri 按照 MVC 控制器的设置返回?

【问题讨论】:

【参考方案1】:

假设您使用“UseOpenIdConnectAuthentication”并将其配置为使用 AAD 身份验证,您可以通过设置 Notifications.RedirectToIdentityProvider 来修改重定向 uri,例如:

Notifications = new OpenIdConnectAuthenticationNotifications

    RedirectToIdentityProvider = async _ =>
    
        _.ProtocolMessage.RedirectUri = _.Request.Uri.ToString();
    

如果您使用其他东西,或者我不明白您的问题 - 请提供更多信息

【讨论】:

以上是关于使用 C# 以编程方式向 MVC 控制器验证 Azure Ad/OpenId 并获取重定向 uri的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式切换 MVC 视图控制器 - iOS

从 C# 以编程方式进行 Firebase 身份验证用户管理

如何向已经使用 Identity 的 MVC 控制器添加 API 身份验证和授权?

以编程方式登录用户 SPring MVC

ASP.net 验证码(C#) MVC

以编程方式使用证书身份验证配置 WCF 服务客户端