C# 如何添加';州';OAuth请求的查询参数(或忽略它)

C# 如何添加';州';OAuth请求的查询参数(或忽略它),c#,asp.net-core,oauth,docusignapi,C#,Asp.net Core,Oauth,Docusignapi,我已经使用ASP.NET Core 2.1创建了一个API服务器。其中一个步骤涉及使用docusignapi授予OAuth代码 当我转到登录路径时,服务器会对用户进行完美的身份验证,身份验证令牌存在于响应中,用户可以执行他们需要的所有操作。 但是,在用户第一次“登录”(或者如果他们已清除缓存)时,当DocuSign登录用户并将其返回回调URL时,将抛出500错误 Startup.cs .AddOAuth(“DocuSign”,选项=> { options.ClientId=配置[“应用程序设置

我已经使用ASP.NET Core 2.1创建了一个API服务器。其中一个步骤涉及使用docusignapi授予OAuth代码

当我转到登录路径时,服务器会对用户进行完美的身份验证,身份验证令牌存在于响应中,用户可以执行他们需要的所有操作。 但是,在用户第一次“登录”(或者如果他们已清除缓存)时,当DocuSign登录用户并将其返回回调URL时,将抛出500错误

Startup.cs


.AddOAuth(“DocuSign”,选项=>
{
options.ClientId=配置[“应用程序设置:连接设置:DocuSign:ClientId”];
options.ClientSecret=配置[“应用程序设置:连接设置:DocuSign:SecretKey”];
options.CallbackPath=新路径字符串(“/ds/callback”);
options.AuthorizationEndpoint=配置[“应用程序设置:连接设置:DocuSign:AuthorizationEndpoint”];
options.TokenEndpoint=配置[“应用程序设置:连接设置:DocuSign:TokenEndpoint”];
options.UserInformationEndpoint=配置[“应用程序设置:连接设置:DocuSign:UserInformationEndpoint”];
选项。范围。添加(“签名”);
options.SaveTokens=true;
选项。索赔。清除();
options.claims.MapJsonKey(ClaimTypes.NameIdentifier,“sub”);
options.claims.MapJsonKey(ClaimTypes.Name,“Name”);
选项.索赔.MapJsonKey(“账户”,“账户”);
options.claims.MapCustomJson(“账户id”,obj=>ExtractDefaultAccountValue(obj,“账户id”);
MapCustomJson(“账户名称”,obj=>ExtractDefaultAccountValue(obj,“账户名称”);
MapCustomJson(“基本uri”,obj=>ExtractDefaultAccountValue(obj,“基本uri”);
选项.claims.MapJsonKey(“访问令牌”,“访问令牌”);
选项.claims.MapJsonKey(“刷新令牌”,“刷新令牌”);
options.claims.MapJsonKey(“expires_in”,“expires_in”);
options.Events=新的OAuthEvents
{
OnCreatingTicket=异步上下文=>
{
var request=newhttprequestmessage(HttpMethod.Get,context.Options.UserInformationEndpoint);
request.Headers.Accept.Add(新的MediaTypeWithQualityHeaderValue(“application/json”);
request.Headers.Authorization=新的AuthenticationHeaderValue(“承载者”,context.AccessToken);
var response=wait context.Backchannel.sendaync(请求,HttpCompletionOption.ResponseHeadersRead,context.HttpContext.RequestAborted);
response.EnsureSuccessStatusCode();
var user=JObject.Parse(wait response.Content.ReadAsStringAsync());
添加(“访问令牌”,context.AccessToken);
添加(“刷新令牌”,context.RefreshToken);
Add(“expires_in”,DateTime.Now.Add(context.ExpiresIn.Value.ToString());
运行声明(用户);
Redirect(“/api/values”);
},
OnRemoteFailure=上下文=>
{
context.HandleResponse();
context.Response.StatusCode=500;
Console.WriteLine(context.Failure.ToString());
返回Task.FromResult(0);
},
};
});
OAuth引发的错误是:

远程身份验证出错:oauth状态丢失或无效。

我使用Fiddler检查了请求参数,似乎OAuth没有缝合“state”参数。


是否仍要添加此参数?甚至可以完全忽略它?

状态是一个可选参数,用于传递任何类型的附加数据,这些数据稍后将在重定向uri中传递回应用程序。您能否尝试在请求中添加&state=,看看这是否解决了问题