【问题标题】:Angular2 + Web API + token based authenticationAngular2 + Web API + 基于令牌的身份验证
【发布时间】:2016-07-31 14:42:19
【问题描述】:

我正在努力学习 Angular2

我正在尝试创建一个带有身份验证的简单博客。

这是我添加一个新的发布方法:

    [Authorize]
    // POST: api/Post
    public PostModel Post([FromBody]PostViewModel model)
    {             
        var post = new PostModel
        {
            Body = model.Body,
            Title = model.Title,
            AuthorId = IdentityExtensions.GetUserId(User.Identity),
        };
        var res = blogRepo.AddPost(post);
        return res;                 
    }

一切正常,但IdentityExtension.GetUserId() 不返回最近登录的用户,而是应用启动后的第一个用户。

基本上我正在寻找一种方法来确保当前用户在服务器和客户端上都注销(客户端只是简单地删除localStorage.removeItem("jwt");

也很有可能我所做的是完全错误的,但我无法访问此控制器中的ApplicationUserManager

【问题讨论】:

  • 如何在 Angular2 应用程序中发送身份验证提示?谢谢!
  • 我在我的Angular应用中做了两个Headers,一个用于正常调用,另一个用于经过身份验证的调用,例如这个,基本上在用户登录时在localStorage中存储了一个访问令牌,并使用授权在标头中发送此令牌:Bearer + token,在客户端,当用户注销并且新用户登录但不登录服务器时,令牌会更改
  • IdentityExtensions.GetUserId(User.Identity) 是否使用某种缓存?它总是返回第一个登录的用户,这似乎很奇怪。它如何使用User.Identity参数?
  • 我真的不确定它是否使用缓存(我完全是角度和 web api + 基于令牌的身份验证的新手),我认为这里的问题是基于令牌的身份验证与正常存储的不同在数据库登录中,我只需要了解这个概念

标签: asp.net-web-api angular asp.net-web-api2 access-token


【解决方案1】:

好的,我已经找到了问题,虽然我还没有设法解决它,但我会在我这样做的时候更新它,我写这个作为答案,因为这个问题与我所问和想的完全不同是。

该问题与 Thierry Templier 建议的发送身份验证提示有关。我有一个像这样导出标题的文件:

  export const authHeaders = new Headers();
    authHeaders.append('Accept', 'application/json');
    authHeaders.append('Content-Type', 'application/json');
    authHeaders.append('Authorization', 'Bearer ' + localStorage.getItem('jwt'));

然后我将这个标题导入到我需要的地方。但我不确定为什么它总是发送一个缓存值(即存储在客户端上的第一个值,正如我的问题所暗示的那样,它与服务器端无关)。

要解决这个问题,我只需确保将本地存储中存储的最新访问令牌发送到服务器。

编辑:现在我在构造函数中构造标题。

【讨论】:

    猜你喜欢
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 2016-06-09
    • 2017-05-19
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    相关资源
    最近更新 更多