当前位置 : 主页 > 网络编程 > ASP >

asp.net-mvc – 使用C#以编程方式将AzureAd / OpenId验证为MVC控制器并获取重定向uri

来源:互联网 收集:自由互联 发布时间:2021-06-24
我已经覆盖了内置的WebClient,如下所示.然后我打电话给它 public class HttpWebClient : WebClient{ private Uri _responseUri; public Uri ResponseUri { get { return _responseUri; } } protected override WebResponse GetWebRespon
我已经覆盖了内置的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而不是重定向的_url.如果我删除AzureAd身份验证它工作正常.有没有办法强制响应uri回来,因为MVC控制器设置它?

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

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

如果你使用别的东西,或者我不明白你的问题 – 请提供更多信息

网友评论