c# - 使用带有 XML post 的 HttpWebRequest 时如何添加 Bearer 和 Scope

标签 c# api oauth

我已尝试以下方法,但身份验证仍然失败

string requestXml = doc.InnerXml;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
byte[] bytes;
bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
request.ContentType = "application/xml; charset=UTF-8;";
request.ContentLength = bytes.Length;
request.Method = "POST";            
request.Headers.Add("Authorization", $"Bearer {accessToken} scope=myendpoint");

我也尝试过

request.Headers.Add("scope", "myendpoint");

最佳答案

您首先通过一系列 HTTP 请求/响应获取 token ,然后在后续 API 调用(新的 HTTP 请求/响应)中使用该 token 作为承载 token 。您获取 token 的方式取决于协议(protocol)。如果协议(protocol)是 oAuth v2 并且(例如)您正在执行客户端凭据授予类型/流程,则 scope 是一个可选请求参数。该请求可能如下所示:

String serviceURL = "https://blah.accesscontrol.windows.net/...";
String body = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope={2}", "<client id>","<client secret>","<scope>");

System.Net.WebRequest webRequest = System.Net.WebRequest.Create(serviceURL);
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "POST";

byte[] payload = System.Text.Encoding.ASCII.GetBytes(body);
webRequest.ContentLength = payload.Length;
using (System.IO.Stream outputStream = webRequest.GetRequestStream())
{
    outputStream.Write(payload, 0, payload.Length);
}
System.Net.WebResponse webResponse = webRequest.GetResponse(););
// extract token from response

添加不记名 token :

request.Headers.Add("Authorization", "Bearer " + token); 

关于c# - 使用带有 XML post 的 HttpWebRequest 时如何添加 Bearer 和 Scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60792547/

相关文章:

c# - 如何在没有 DynamicInvoke 的情况下编译 MethodCallExpression?

c# - 是否有将 ANSI C 代码转换为 C# 的工具?

api - 网站创建者的网络分析解决方案

jquery - 从对 Last.FM API 的请求返回的文件中出现错误

windows - 有没有办法在浏览器之外实现 OpenAuth 而无需诉诸黑客?

c# - 我在哪里可以免费找到一个不错的 .NET 选项卡控件?

c# - EntityState 修改后的 SaveChanges 不保存

javascript - 使用 Javascript 从 openweathermap API 检索 5 天天气海报

Grails oauth 插件不起作用

c# - DotNetOpenAuth 是否支持刷新过期访问 token ?