Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oauth 2.0 web api 2-禁止Oauth2承载令牌访问_Oauth 2.0_Asp.net Web Api2 - Fatal编程技术网

Oauth 2.0 web api 2-禁止Oauth2承载令牌访问

Oauth 2.0 web api 2-禁止Oauth2承载令牌访问,oauth-2.0,asp.net-web-api2,Oauth 2.0,Asp.net Web Api2,我有一个带有web api 2的mvc 5应用程序。(.NET 4.6) 我在mvc应用程序(app.UseCookieAuthentication)的身份验证旁边实现了oauth2配置: 我的API受Authorize属性(全局过滤器)的保护 我使用客户端凭据授权 我看了这两篇文章(都一样) 我可以为我的用户获取一个令牌,但是当我想使用该令牌访问我的Api时,我会得到一个403禁止的错误 HttpClient client = new HttpClient();

我有一个带有web api 2的mvc 5应用程序。(.NET 4.6) 我在mvc应用程序(app.UseCookieAuthentication)的身份验证旁边实现了oauth2配置:

我的API受Authorize属性(全局过滤器)的保护

我使用客户端凭据授权

我看了这两篇文章(都一样)

我可以为我的用户获取一个令牌,但是当我想使用该令牌访问我的Api时,我会得到一个403禁止的错误

        HttpClient client = new HttpClient();
        Dictionary<string, string> parameters = new Dictionary<string, string>();
        parameters.Add("grant_type", "client_credentials");
        parameters.Add("client_id", "4rclFahG7gho8erzbsmTbw==");
        parameters.Add("client_secret", "IBSqiYb0kT/lzV0gpQsPxkUDI9ztu0dhHWDe4VQDzKGYm2pl+75sMVfEsoGo4FAxFm0qZUFcDrVMrfqYhn2bzw==");

        var content = new FormUrlEncodedContent(parameters);
        try
        {
            HttpResponseMessage result = client.PostAsync("http://localhost:49594/oauth/token", content).Result;
            string jsonResult = result.Content.ReadAsStringAsync().Result;

            var resultObject = JsonConvert.DeserializeObject<TokenResult>(jsonResult);
            var accessToken = resultObject.access_token;


            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
            result = client.GetAsync("http://localhost:49594/api/v1/echo?id=myt

estvalue").Result;

// RESULT  is 403 - Forbidden
HttpClient=newhttpclient();
字典参数=新字典();
添加(“授权类型”、“客户端凭据”);
添加(“客户机id”,“4rclFahG7gho8erzbsmTbw==”;
添加(“客户机密”、“IBSqiYb0kT/LZV0GPQSPXKUDI9ZTU0DHHWDE4VQDZKYMP2PL+75sMVfEsoGo4FAxFm0qZUFcDrVMrfqYhn2bzw=”;
var content=new FormUrlEncodedContent(参数);
尝试
{
HttpResponseMessage结果=客户端.PostAsync(“http://localhost:49594/oauth/token“,内容)。结果;
字符串jsonResult=result.Content.ReadAsStringAsync().result;
var resultObject=JsonConvert.DeserializeObject(jsonResult);
var accessToken=resultObject.access\u令牌;
client.DefaultRequestHeaders.Add(“授权”、“承载人”+accessToken);
结果=client.GetAsync(“http://localhost:49594/api/v1/echo?id=myt
(b)结果;
//结果是403-禁止
我也和邮递员一起测试过,结果是一样的

有没有人经历过同样的问题

你知道我错过了什么吗

更新:
如果我将我的应用程序部署在服务器(azure app services)上,但仍然不在我的计算机上,那么它就可以工作了。

我找到了问题的原因

我正在为我的开发人员使用stuntman(),但我忘了为oauth配置它

该行丢失:

StuntmanOptions.AllowBearerTokenPassthrough=true

        HttpClient client = new HttpClient();
        Dictionary<string, string> parameters = new Dictionary<string, string>();
        parameters.Add("grant_type", "client_credentials");
        parameters.Add("client_id", "4rclFahG7gho8erzbsmTbw==");
        parameters.Add("client_secret", "IBSqiYb0kT/lzV0gpQsPxkUDI9ztu0dhHWDe4VQDzKGYm2pl+75sMVfEsoGo4FAxFm0qZUFcDrVMrfqYhn2bzw==");

        var content = new FormUrlEncodedContent(parameters);
        try
        {
            HttpResponseMessage result = client.PostAsync("http://localhost:49594/oauth/token", content).Result;
            string jsonResult = result.Content.ReadAsStringAsync().Result;

            var resultObject = JsonConvert.DeserializeObject<TokenResult>(jsonResult);
            var accessToken = resultObject.access_token;


            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
            result = client.GetAsync("http://localhost:49594/api/v1/echo?id=myt

estvalue").Result;

// RESULT  is 403 - Forbidden