我正在使用 Asp.net 身份在我的 Web api 应用程序中进行基于令牌的身份验证。问题是,在生成令牌并验证用户之后,以及在重定向到客户端之前,我必须执行一些操作。
我有一个使用/token 令牌身份验证的登录页面。令牌颁发后,我需要将用户和令牌值保留在会话中。[此会话将用于显示在线用户。
客户端请求
$('#btnLogin').click(function () {
$.ajax({
// Post username, password & the grant type to /token
url: '/token',
method: 'POST',
contentType: 'application/json',
data: {
username: $('#txtUsername').val(),
password: $('#txtPassword').val(),
grant_type: 'password'
}
});
服务器端
[HttpPost]
public void Login()
{
OnlineUsers user = new OnlineUsers();
var users = (HttpContext.Current.Session["ActiveUsers"] as
List<OnlineUsers>) ?? new List<OnlineUsers>();
users.Add(user);
HttpContext.Current.Session["ActiveUsers"] = users;
}
我需要在颁发令牌并对使用进行身份验证后调用此控制器方法。有什么解决方案吗?
如果你想拦截令牌的生成,想想你必须自定义aspnet标识行为
https://msdn.microsoft.com/en-us/library/microsoft.aspnet.identity.usermanagerextensions.generateusertoken(v=vs.108(.aspx
Web API 使用会话不是一个好方法,要将用户信息保存在客户端,您可以使用浏览器的本地存储。用户通过登录 api 控制器进行身份验证后,您可以将用户所需的信息作为 json 返回给客户端,然后您可以将其保留给浏览器。Web API 默认情况下是无状态的,所以我认为会话不适合它,给客户端带来了额外的负担。在服务器上存储会话状态违反了 REST 体系结构的无状态约束。因此,会话状态必须完全由客户端处理。
网络接口
[HttpPost]
public IHttpActionResultLogin()
{
OnlineUsers user = new OnlineUsers();
user=YourUserDetailsMethod();
return Ok(user);
}
客户:
$('#btnLogin').click(function () {
$.ajax({
// Post username, password & the grant type to /token
url: '/token',
method: 'POST',
contentType: 'application/json',
data: {
username: $('#txtUsername').val(),
password: $('#txtPassword').val(),
grant_type: 'password'
},
success: function(response){
window.localStorage.setItem('userInfo', response);
$('#UserName').val(window.localStorage.getItem('userInfo').UserName);
}
});