asp.net-mvc – 使用令牌认证访问Web Api的MVC .NET cookie认证系统

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 使用令牌认证访问Web Api的MVC .NET cookie认证系统前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Mvc 5客户端拥有自己的cookie认证。
我还有一个受到Owin承载令牌保护的Web Api(我使用了创建令牌端点的VS2013 Web Api模板)

好的,现在我的Mvc 5客户端需要使用我的WebApi。
我创建了一个获取承载令牌的方法

internal async Task<string> GetBearerToken(string siteUrl,string Username,string Password)
{
     HttpClient client = new HttpClient();

     client.BaseAddress = new Uri(siteUrl);
     client.DefaultRequestHeaders.Accept.Clear();

     HttpContent requestContent = new StringContent("grant_type=password&username=" + Username + "&password=" + Password,Encoding.UTF8,"application/x-www-form-urlencoded");

     HttpResponseMessage responseMessage = await client.PostAsync("Token",requestContent);

     if (responseMessage.IsSuccessStatusCode)
     {
         TokenResponseModel response = await responseMessage.Content.ReadAsAsync<TokenResponseModel>();
         return response.AccessToken;
     }

     return "";
}

在我的Mvc行动中,我呼吁:

public async Task<ActionResult> Index()
{
     var token = await GetBearerToken("http://localhost:6144/","teste","123456");

     using (var client = new HttpClient())
     {
         client.DefaultRequestHeaders.Add("Authorization","Bearer "+ token);

         var response = await client.GetAsync("http://localhost:6144/api/values");

         if (response.IsSuccessStatusCode)
         {
             var data = response.Content.ReadAsAsync<IEnumerable<string>>();

             return Json(data.Result,JsonRequestBehavior.AllowGet);
         }
     }   
}

这一切都很好…但我需要使用Web Api在我的所有行动…
那么如何保持该令牌(尽管每个请求获得一个新的令牌)以及如何验证它是否过期…有可能保持与认证cookie在一起吗?
处理这种情况的最好的方法

谢谢

解决方法

如果我正确的话,您的MVC 5客户端应用程序正在访问不同应用程序的WebAPI。
MVC 5客户端使用cookie来验证用户。要访问WebAPI,您可以从/ Token端点获取承载信号,并将其发送到授权标头。

您不要从客户端Javascript代码调用WebAPI,您只需要在MVC操作的MVC操作运行MVC5应用程序的服务器上调用它。

在每个服务调用声音错误之前获取一个新的令牌。这意味着每次两次往返。这不能执行。

如果我是对的,你可以:

>将令牌存储在Session对象中。只要您的MVC应用程序的用户进行身份验证,并且他的会话仍然存在,那么您将始终拥有相同的令牌。
如果它已过期,您可以从WebAPI获得401未经授权的访问。
要保持您的MVC动作单元可测试,您可以将会话访问包装到您注入到Action(依赖注入)中的服务中。
>您可以将令牌存储在类似于已存在的Authentication Cookie的cookie中。这样您就不需要在服务器端进行会话。再次,我将包含访问权限,从Cookie中获取所有操作使用的服务中的令牌。

我将使用会话存储。简单。直向前
但也许我错过了一些东西

希望这可以帮助你。反馈赞赏:-)

原文链接:https://www.f2er.com/aspnet/252318.html

猜你在找的asp.Net相关文章