C# OAuth2承载令牌未与RestSharp呼叫一起发送

C# OAuth2承载令牌未与RestSharp呼叫一起发送,c#,oauth-2.0,restsharp,C#,Oauth 2.0,Restsharp,凭据是正确的,因为我可以使用PS和secret获得API响应。令牌不是无效的,但无法正确连接到rest请求 未经授权。访问令牌丢失或无效 这是我的密码: var client = new RestClient(url); client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator("Bearer: " + OAuthToken); var request = new RestRequest(Method.POS

凭据是正确的,因为我可以使用
PS
secret
获得
API响应。令牌不是无效的,但无法正确连接到rest请求

未经授权。访问令牌丢失或无效

这是我的密码:

var client = new RestClient(url);
client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator("Bearer: " + OAuthToken);
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("Accept", "application/json");

foreach (var paramName in parameters.Keys) {
    request.AddParameter(paramName, parameters[paramName]);
}

request.RequestFormat = DataFormat.Json;

IRestResponse response = client.Execute(request);
if (response.StatusCode == HttpStatusCode.OK) {
    string rawResponse = response.Content;
    dynamic deserializedResponse = new JsonDeserializer().Deserialize<dynamic>(response);
    return deserializedResponse;
}
else {
    Dictionary<string, string> returnData = new JsonDeserializer().Deserialize<Dictionary<string, string>>(response);
    throw new Exception("Failed call to API Management: " + string.Join(";", returnData));
 }
var-client=新的RestClient(url);
client.Authenticator=新的OAuth2AuthorizationRequestHeaderAuthenticator(“持有者:“+OAuthToken”);
var请求=新的重新请求(Method.POST);
request.AddHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
AddHeader(“接受”、“应用程序/json”);
foreach(parameters.Keys中的var paramName){
request.AddParameter(paramName,parameters[paramName]);
}
request.RequestFormat=DataFormat.Json;
IRestResponse response=client.Execute(请求);
if(response.StatusCode==HttpStatusCode.OK){
字符串rawResponse=response.Content;
dynamic deserializedResponse=新的JsonDeserializer()。反序列化(响应);
返回反序列化响应;
}
否则{
Dictionary returnData=new JsonDeserializer()。反序列化(响应);
抛出新异常(“对API管理的调用失败:+string.Join(“;”,returnData));
}
我还尝试使用:

  • request.AddHeader(“授权”、“承载人”+OAuthToken)
  • request.AddHeader(“授权”,string.Format(“承载者”+OAuthToken))
  • request.AddHeader(“授权”,string.Format(“承载者:“+OAuthToken”)
  • request.AddHeader(“授权”、$“承载{OAuthToken}”)
  • request.AddParameter(“授权”,承载“+OAuthToken”,HttpRequestHeader)
  • request.AddHeader(“授权”,“承载者:+access+”)

  • 没有起作用。

    您不需要验证器。 首先,您应该装饰控制器或操作,如下所示:

    [Authorize(AuthenticationSchemes = "Bearer")]
    public class ApiServiceController : Controller
    {
    }
    
    或者更好:

    [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
    public class ApiServiceController : Controller
    {
    }
    
    然后,您应该添加令牌承载,如下所示:

    request.AddParameter("Authorization", $"Bearer {OAuthToken}", ParameterType.HttpHeader);
    
    其中OAuthToken是从login接收的令牌的值


    如果您需要更多代码,请告诉我;)

    这个问题由来已久,但对于任何一个再次提出这个问题的人来说。。这就是我的工作原理: 我的项目配置为使用Https,我没有发送Https请求,所以服务器向我发回一个响应,通知我应该使用Https请求。在此之后,RestSharp这次使用Https自动执行重定向,但不包括授权标头。Mor信息中心:

    我的解决方案只是将我的web api Url更改为使用Https

    不确定这是否对任何人都有帮助,但就我而言,问题在于JWT发布时间。我使用的是当前时间,服务器落后了几秒钟。我注意到,当我单步执行代码时,JWT令牌正在工作,但当我不停地运行它时,JWT令牌就不工作了。我通过从JWT发布时间中减去1分钟解决了这个问题。

    当我像这样使用它时,我无法进行身份验证

    request.AddHeader(“授权”、$“承载{axcessToken}”)

    相反,这对我起了作用

    client.AddDefaultHeader(“授权”、$“承载{axcessToken}”)

    使用

    var client = new RestClient(URL);
    client.AddDefaultHeader("Authorization", string.Format("Bearer {0}", accessToken));
    

    以下代码适用于我:

    var restClient = new RestClient(Url)
    {
        Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(accessToken, "Bearer")
    };
    

    因此,“授权”头将包含“承载{accessToken}”

    上述代码是否为令牌生成部分?