使用 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的主要内容,如果未能解决你的问题,请参考以下文章
从 C# 以编程方式进行 Firebase 身份验证用户管理