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



我已经覆盖了内置的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 控制器设置的内容?

假设你使用"UseOpenIdConnectAuthentication"并将其配置为使用 AAD 身份验证,则可以通过设置 Notifications.RedirectToIdentityProvider 来修改重定向 URI,如下所示:

Notifications = new OpenIdConnectAuthenticationNotifications
{
    RedirectToIdentityProvider = async _ =>
    {
        _.ProtocolMessage.RedirectUri = _.Request.Uri.ToString();
    }
}

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

最新更新