Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
Asp.net mvc 使用oauth的mvc和web.api授权_Asp.net Mvc_Api_Oauth_Asp.net Mvc 5 - Fatal编程技术网

Asp.net mvc 使用oauth的mvc和web.api授权

Asp.net mvc 使用oauth的mvc和web.api授权,asp.net-mvc,api,oauth,asp.net-mvc-5,Asp.net Mvc,Api,Oauth,Asp.net Mvc 5,似乎我问的问题和许多人的问题一样,但不能把所有的东西都放在一起。 我有一个使用Oauth配置的标准MVC应用程序,该应用程序使用标准Identity DB,用户登录后一切正常,然后我想以经过身份验证的用户身份调用Web.API应用程序。根据我的研究,我已将承载令牌添加到httpclient,认为这将以某种方式在web.api应用程序中得到授权。我已将web.api应用程序设置为指向相同的标识数据库,但我不确定我缺少了什么。我花了好几天的时间在这上面,运气不好,所以任何样品都将不胜感激 获取承载令

似乎我问的问题和许多人的问题一样,但不能把所有的东西都放在一起。 我有一个使用Oauth配置的标准MVC应用程序,该应用程序使用标准Identity DB,用户登录后一切正常,然后我想以经过身份验证的用户身份调用Web.API应用程序。根据我的研究,我已将承载令牌添加到httpclient,认为这将以某种方式在web.api应用程序中得到授权。我已将web.api应用程序设置为指向相同的标识数据库,但我不确定我缺少了什么。我花了好几天的时间在这上面,运气不好,所以任何样品都将不胜感激

获取承载令牌的代码是

protected string GetToken()
    {
        var identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);
        identity.AddClaim(new Claim(ClaimTypes.Name, User.Identity.Name));
        identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, User.Identity.GetClaimValue(ClaimTypes.NameIdentifier.ToString())));
        AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
        var currentUtc = new SystemClock().UtcNow;
        ticket.Properties.IssuedUtc = currentUtc;
        ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30));
        string accessToken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket);
        return accessToken;
    }
对Web.APi的调用是

var token = GetToken();
        string uri = UriEASOnlineApi + EASOnlineWebAPI.SignErectors;

        List<SignErector> result;
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
            var task = await client.GetAsync(uri);
            if (task.IsSuccessStatusCode)
            {
                var jsonString = await task.Content.ReadAsStringAsync();
                result = JsonConvert.DeserializeObject<List<SignErector>>(jsonString);
            }
            else
            {
                throw new Exception($"failed: {task.StatusCode}");
            }
        }
var-token=GetToken();
字符串uri=UriEASOnlineApi+EASOnlineWebAPI.SignErectors;
列出结果;
使用(var client=new HttpClient())
{
client.DefaultRequestHeaders.Add(“授权”、“承载人”+令牌);
var task=await client.GetAsync(uri);
if(任务。IsSuccessStatusCode)
{
var jsonString=await task.Content.ReadAsStringAsync();
结果=JsonConvert.DeserializeObject(jsonString);
}
其他的
{
抛出新异常($“失败:{task.StatusCode}”);
}
}

首先,您需要知道如何在WebApi中进行身份验证。然后,如果您有调用此WebApi的工作示例(例如来自Postman或Fiddler),您可以将手动请求与从MVC应用程序以编程方式创建的请求进行比较