使用oauth进行mvc和web.api授权

时间:2015-12-09 15:12:23

标签: asp.net-mvc api oauth asp.net-mvc-5

似乎我在问同样的问题,许多人都有,但不能把所有东西放在一起。 我有一个使用标准Identity DB配置了Oauth的标准MVC应用程序,用户登录并且一切正常,然后我想将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}");
            }
        }

1 个答案:

答案 0 :(得分:0)

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