繁体   English   中英

OAuth2 承载令牌未通过 RestSharp 调用发送

[英]OAuth2 Bearer Token not getting sent with RestSharp call

凭据是正确的,因为我可以使用具有相同client idsecret PS获得API response 令牌不是无效的,但它不会正确附加到其余请求

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

这是我的代码:

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));
 }

我也试过使用:

  1. request.AddHeader("authorization", "Bearer " + OAuthToken);
  2. request.AddHeader("authorization", string.Format("Bearer " + OAuthToken));
  3. request.AddHeader("authorization", string.Format("Bearer: " + OAuthToken));
  4. request.AddHeader("authorization", $"Bearer {OAuthToken}");
  5. request.AddParameter("authorization, "Bearer " + OAuthToken", HttpRequestHeader);
  6. request.AddHeader("authorization", "bearer:" + access + "");

没有一个工作。

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

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

或比这更好:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class ApiServiceController : Controller
{
}

然后你应该添加令牌承载作为这一行:

request.AddParameter("Authorization", $"Bearer {OAuthToken}", ParameterType.HttpHeader);

其中 OAuthToken 是从登录接收到的令牌的值。

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

问题很老了,但对于任何人来说,再次出现这个问题..这对我有用:我的项目被配置为使用Https ,并且我没有发送Https请求,所以服务器向我发送了一个响应,通知我应该使用一个Https请求。 之后,RestSharp 这次使用 Https自动执行重定向,但不包括 Authorization Header。 更多信息在这里: https : //github.com/restsharp/RestSharp/issues/414

我的解决方案只是将我的 web api Url 更改为使用 Https https://.../api/values

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

我在使用它时无法进行身份验证

request.AddHeader("Authorization", $"Bearer {axcessToken}");

相反,这对我有用

client.AddDefaultHeader("Authorization", $"Bearer {axcessToken}");

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

以下代码对我有用:

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

因此,“Authorization”标头将包含“Bearer {accessToken}”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM