在控制器方法中颁发令牌后获取令牌和用户详细信息



我正在使用 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);
            }
});

相关内容

  • 没有找到相关文章

最新更新