C# &引用;无效的“授权”;来自角度SPA的DocuSign令牌api的错误
我使用下面的代码从docusign获取访问令牌和刷新令牌。 但我总是收到无效的授权错误。我正在粘贴下面的代码C# &引用;无效的“授权”;来自角度SPA的DocuSign令牌api的错误,c#,docusignapi,asp.net-core-webapi,C#,Docusignapi,Asp.net Core Webapi,我使用下面的代码从docusign获取访问令牌和刷新令牌。 但我总是收到无效的授权错误。我正在粘贴下面的代码 [HttpGet("GetDocToken")] [AllowAnonymous] public async Task<IActionResult> getToken(string docCode) { var x = docCode.Length; var client = new HttpClient();
[HttpGet("GetDocToken")]
[AllowAnonymous]
public async Task<IActionResult> getToken(string docCode)
{
var x = docCode.Length;
var client = new HttpClient();
var authCode=Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("ced8998a-4387-4f30-9ab7-51c0d1af49bf:d7c3ccd4-22fa-4f18-a540-ddf11d8b2c9f"));
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authCode);
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
var requestContent = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("grant_type", "authorization_code"),
new KeyValuePair<string, string>("code", docCode),
new KeyValuePair<string, string>("redirect_uri", "http://localhost:4200/auth")
});
HttpResponseMessage response = await client.PostAsync("https://account-d.docusign.com/oauth/token", requestContent);
string resultContent = response.Content.ReadAsStringAsync().Result;
return Ok(response.Content.ReadAsStringAsync());
}
[HttpGet(“GetDocToken”)]
[异名]
公共异步任务getToken(字符串docCode)
{
var x=docCode.Length;
var client=新的HttpClient();
var authCode=Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(“ced8998a-4387-4f30-9ab7-51c0d1af49bf:d7c3ccd4-22fa-4f18-a540-ddf11d8b2c9f”);
client.DefaultRequestHeaders.Authorization=new System.Net.Http.Headers.AuthenticationHeaderValue(“基本”,authCode);
client.DefaultRequestHeaders.Accept.Add(新的System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(“application/x-www-form-urlencoded”);
var requestContent=newformurlencodedcontent(new[]{
新的KeyValuePair(“授权类型”、“授权代码”),
新的KeyValuePair(“代码”,docCode),
新的KeyValuePair(“重定向uri”)http://localhost:4200/auth")
});
HttpResponseMessage响应=等待客户端。PostAsync(“https://account-d.docusign.com/oauth/token“,内容);
字符串resultContent=response.Content.ReadAsStringAsync().Result;
返回Ok(response.Content.ReadAsStringAsync());
}
我的假设是,您已从DocuSign标识系统收到身份验证码,并试图将其交换为访问令牌
有几个问题:
错误地指示重定向uri应包含在请求中。文档中的示例请求确实正确地表明,请求应仅包括grant\u类型
和code
参数
注意:虽然第4.1(d)节确实指出应该包括重定向url,但DocuSign通常不包括它
我的猜测是DocuSign将忽略redirect_uri参数,但您可能希望尝试将其忽略
另一个问题是计时问题:您从DocuSign收到的授权码仅在一分钟左右有效。如果您没有立即使用授权代码(您的代码为docCode
),则您将收到无效授权错误
已知良好示例软件
我建议你也去看看。您可以使用协议窥视器查看它在身份验证过程中的具体操作
使用图书馆
我还建议您寻找一个OAuth授权代码客户机库,您可以使用它来代替滚动自己的库
例如,您是否正在设置和检查状态值?这样做对于阻止CSRF攻击非常重要。看这个
补充
我也不清楚您是否使用了正确的值作为授权代码
我认为流程应该是:
code
和state
code
和state
查询参数状态是否与步骤2中发送的相同
您的另一个选择是使用隐式授权。这样,您就不需要服务器组件。通过隐式授权,您的Angular程序可以处理流程。您使用什么提交?“您使用什么提交?”此评论有点让人困惑。我不明白这个问题,我想说的是,您使用什么样的UI技术将数据提交到服务器?Jquery?有棱角的反应?实际上我用angular做前端。从那里我调用我的web api。在该web api中,我为令牌调用docusign api。上面我粘贴的是c代码