背景
我的任务是为我的客户建立一个门户网站,让他们能够访问有关其账户、费用/余额的信息,消息等。客户信息通过我的客户金融软件进行管理,并通过API公开。所有CRUD操作都通过此API执行。我实现了一个类,它构建并执行每个web请求,反序列化并处理并将结果返回给MVC控制器,MVC控制器随后相应地更新UI。
问题
我目前面临的问题是实现安全登录。我计划使用身份验证在我的客户财务中拥有账户的客户软件问题是身份验证必须通过API进行,而不是通过数据库进行。API将返回附加到每个后续请求的令牌。到目前为止,我看到的所有示例都使用数据库对用户进行身份验证。如何设置标识并将其配置为使用API而不是将数据库作为数据数据源。
关闭ASP。NET Identity/Identity Server路由是最好的选择,但如果你想…这里有另一个选项
您可以获取令牌并存储在Form Cookie中,并在每次请求时验证/提取用户信息。
//将令牌添加到响应cookie
public ActionResult Login(string username, string password)
{
var token = _api.Authenticate(username, password);
//not only token you could store any user information (Name), you have to serialize it
var ticket = new FormsAuthenticationTicket(1, email, DateTime.UtcNow, DateTime.UtcNow.AddHours(1), false, token, _formsAuthentication.FormsCookiePath);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket))
{
Path = FormsAuthentication.FormsCookiePath,
Secure = false,
HttpOnly = false,
Domain = null,
Expires = DateTime.UtcNow.AddHours(1)
};
Response.Cookies.Add(cookie);
}
//从HttpContext
获取令牌信息
var authCookie = HttpContext.Current.User.Identity as FormsIdentity;
var token = authCookie.Ticket.UserData
if(authCookie.IsAuthenticated)
{
// do something....
}
将其添加到web.config
<system.web>
<authentication mode="Forms"/>
</system.web>
参考ASP自定义存储提供程序概述中的文档。NET标识
ASP。NET Identity是一个可扩展的系统,使您能够创建您自己的存储提供商,并将其插入您的应用程序正在重新处理应用程序。
您可以实现自己的提供者,该提供者与web api对话,而不是直接与数据库对话。