OAuth2承载令牌未随RestSharp调用发送

ecfdbz9o  于 2023-10-15  发布在  其他
关注(0)|答案(7)|浏览(135)

凭据是正确的,因为我可以使用PS和相同的client idsecret获得API response。令牌不是无效的,但它不会正确附加到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));
 }

我也试过使用:

  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 + "");
    没有一个奏效。
5jvtdoz2

5jvtdoz21#

下面的代码对我有用:

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

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

i1icjdpr

i1icjdpr2#

当我使用它的时候,
request.AddHeader("Authorization", $"Bearer {axcessToken}");
相反,这对我很有效
client.AddDefaultHeader("Authorization", $"Bearer {axcessToken}");

kuarbcqp

kuarbcqp3#

你不需要身份验证器。首先,你应该像下面这样装饰控制器或动作:

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

或者更好:

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

然后你应该添加token bearer作为这一行:

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

其中OAuthToken是从登录接收的令牌的值。
如果你需要更多的密码,就告诉我;)

a9wyjsp7

a9wyjsp74#

这个问题已经很老了,但是对于任何一个再次来到这里的人来说。这就是我的工作:我的项目被配置为使用Https,我没有发送Https请求,所以服务器向我发送了一个响应,通知我应该使用Https请求。之后,RestSharp会自动重定向,这次使用的是HTTPS,但不包括Authorization Header。莫尔在这里:https://github.com/restsharp/RestSharp/issues/414
我的解决方案只是将我的web API URL更改为使用HTTPS https://.../api/values

vdzxcuhz

vdzxcuhz5#

不知道这是否会帮助任何人,但在我的情况下,问题是JWT的问题时间。我用的是当前时间,服务器慢了几秒钟。我注意到,当我单步执行代码时,JWT令牌正在工作,但当我不暂停地运行它时,它就不工作了。我通过从JWT发布时间中减去1分钟来修复这个问题。

0mkxixxg

0mkxixxg6#

使用

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

plupiseo7#

我在ASP.NET框架中遇到了同样的问题。使用AddParameter,如下所示,工作正常。

RestClient client = new RestClient(Url);
RestRequest request = new RestRequest(Method.POST);
request.AddParameter("token", _OsiApiToken);
request.AddParameter("value", value);
IRestResponse response = client.Execute(request);

在此之前(工作版本),我有网址作为.

String.Format("https://myorg.locator.com/arcgis/rest/services/something/?token={0}&amp;value={1}", X, Y)

奇怪的是,后一个String.Format()在一个项目中有效,但在另一个项目中无效。奇怪了

相关问题