如何使用在单独的Web API项目中生成的令牌在MVC项目上启动“会话”?

时间:2018-08-04 14:40:11

标签: asp.net-mvc authentication asp.net-web-api authorization token

在一个解决方案中,我有两个单独的项目。一个是Web Api,另一个是MVC。 Web Api项目没有界面。它具有Owin令牌生成机制。 MVC项目具有用于用户界面的视图以及用于发出Http请求和接收响应的控制器。

在MVC项目上,我基本上使用HttpClient将用户名和密码发送到Web Api项目的/ token端点。然后,Web Api项目将检查凭据是否与数据库匹配。如果是这样,它将生成访问令牌,令牌类型,到期日期,刷新令牌和用户名值并将其返回给MVC项目。

我的问题是,如何使用Web Api项目返回到MVC项目的令牌和其他信息来启动某种“会话”?通过会话,我的意思是,我想在MVC项目上创建一个指示器,以显示用户已登录。该指示器也应该在视图层上可访问(以显示已登录的用户名等)。另外,我应该如何在MVC项目上存储令牌和用户名,并能够将其发布到Api项目的请求中,以访问需要授权的端点?

P.S。我更喜欢将HttpClient用于请求和响应,而不是ajax或任何JS框架。

谢谢。

1 个答案:

答案 0 :(得分:0)

在MVC项目中创建如下所示的模态:

class SessionValues
{
    public string AccessToken { get; set; }
    public string RefreshToken { get; set; }
    public string UserName { get; set; }
    public DateTime ExpiryDate { get; set; }
}

然后在此模式对象中隐藏Token API响应,并将该对象存储在Session变量中,例如

SessionValues tokenData=convert response from token endpoint to this entity
Session["TokenData"]=tokenData;

现在,每当您进行API调用时,请使用存储在Session [“ TokenData”]中的令牌值进行授权。另外,您可以在此属性的 ExpiryDate 属性上添加检查以检查令牌是否已过期,并且如果需要,可以再次获取新令牌。