凭据是正确的,因为我可以使用API response
和PS
和client id
来获得secret
。令牌无效,但不会正确地连接到其余请求
未经授权。访问令牌丢失或无效
这是我的代码:
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));
}
我也尝试使用:
request.AddHeader("authorization", "Bearer " + OAuthToken);
request.AddHeader("authorization", string.Format("Bearer " + OAuthToken));
request.AddHeader("authorization", string.Format("Bearer: " + OAuthToken));
request.AddHeader("authorization", $"Bearer {OAuthToken}");
request.AddParameter("authorization, "Bearer " + OAuthToken", HttpRequestHeader);
request.AddHeader("authorization", "bearer:" + access + "");
没有工作。
答案 0 :(得分:0)
问题已经老了,但是对于任何一个再次遇到这个问题的人来说,这都是对我有用的: 我的项目配置为使用 Https ,并且我没有发送 Https 请求,因此服务器将响应发回给我,通知我应该使用 Https < / strong>请求。之后,RestSharp这次使用Https自动执行 重定向,但不包括Authorization Header。在这里的信息:https://github.com/restsharp/RestSharp/issues/414
我的解决方案是将我的网络API网址更改为使用Https https://.../api/values
答案 1 :(得分:0)
不确定这是否对任何人有帮助,但就我而言,问题是 JWT 发布时间。我使用的是当前时间,服务器落后了几秒钟。我注意到当我单步执行代码时 JWT 令牌正在工作,但在我没有暂停的情况下运行它时却没有。我通过从 JWT 发布时间中减去 1 分钟解决了这个问题。
答案 2 :(得分:0)
我在使用它时无法进行身份验证
request.AddHeader("Authorization", $"Bearer {axcessToken}");
相反,这对我有用
client.AddDefaultHeader("Authorization", $"Bearer {axcessToken}");
答案 3 :(得分:0)
使用
var client = new RestClient(URL);
client.AddDefaultHeader("Authorization", string.Format("Bearer {0}", accessToken));
答案 4 :(得分:0)
以下代码对我有用:
var restClient = new RestClient(Url)
{
Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(accessToken, "Bearer")
};
因此,“Authorization”标头将包含“Bearer {accessToken}”
答案 5 :(得分:-1)
您不需要身份验证器。 首先,您应该装饰控制器或类似以下的动作:
[Authorize(AuthenticationSchemes = "Bearer")]
public class ApiServiceController : Controller
{
}
或更妙的是:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class ApiServiceController : Controller
{
}
然后,您应在此行中添加令牌承载:
request.AddParameter("Authorization", $"Bearer {OAuthToken}", ParameterType.HttpHeader);
其中OAuthToken是从登录名接收到的令牌的值。
如果您需要更多代码,请告诉我;)