【问题标题】:How to use ASP.net 5 Identity in web API application? User authentication based on tokens. Mobile apps如何在 Web API 应用程序中使用 ASP.net 5 Identity?基于令牌的用户身份验证。移动应用
【发布时间】:2016-03-20 11:54:14
【问题描述】:

假设我目前有一个基于 Visual Studio 2015“WebApp”模板的新创建项目,带有个人帐户身份验证,我使用 Microsoft.AspNet.Authentication 包,我不能总是依赖 cookie,因为我的 Web API 也应该针对移动设备应用:

如何向我的 Web API 添加身份验证?我对基于令牌的身份验证特别感兴趣。

【问题讨论】:

  • 你没有在浏览器中保留Authenticated Data,你保留了一个会话变量Session["IsAuthenticated"],这取决于用户/密码是否通过逻辑/登录。 . 这实际上非常容易.. 大量示例查找PrincipalContext Class 还有一些方法可以针对 sql server 等进行验证..
  • ASP.NET Web API 和 MVC 已在 MVC 6 中合并。我想你会发现你可以使用 MVC 正在使用的任何东西,但显然使用 Web API 你正在处理对端点的调用而不是一个预建的用户界面。
  • 如果您找不到任何有价值的信息,那么您肯定是找错地方了。 F.e.:谷歌在 5 秒内将我引导至此页面:asp.net/web-api/overview/security/…

标签: c# asp.net asp.net-web-api asp.net-core


【解决方案1】:

在您的 web api 项目中实现自定义 AuthorizeAttribute。在 IsAuthorized(HttpActionContext actionContext) 重载中,您可以检查授权方案和授权标头,然后您可以连接到会话提供程序并检查用户是否有活动会话。 您必须在授权标头中传递登录令牌,因此如果缺少令牌,则意味着没有活动用户。 因此,当您登录时,您必须在成功登录时创建并加密令牌。然后将此令牌与每个请求一起传递给服务器。
此博客包含有关使用 AuthorizeAttribute 的更多信息:http://weblogs.asp.net/jongalloway/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way

【讨论】:

    【解决方案2】:

    您可以使用基本的 http 身份验证,也可以使用通过 http 标头传递的令牌或票证来实现类似的身份验证。

    【讨论】:

    • 但是我使用的这个库是否提供了一些生成这些令牌的方法?我必须自己开发和存储这些令牌还是已经完成?
    【解决方案3】:

    您可以在数据库中创建单独的表来存储身份验证详细信息(AuthKey、UserID、CreatedDate、ExpiredDate、IsExpired),并创建 CheckAuthorizationKey(string authKey)、ExtendAuthorization(string authKey)、ExpireAuthorization(string authKey)等函数{}

    并调用该函数来检查授权,如下示例代码。

    public ServiceResult<LoginModel> Login(string auth_key)
     {
                var service = new ServiceResult<LoginModel>();
                LoginModel user = new LoginModel();
                if (AuthKey.CheckAuthorizationKey(auth_key) == false)
                {
                    service.message = TemplateCodes.GetMessage(TemplateCodes.UnAuthorize, null, db);
                    service.status = ServiceStatus.authorization_failed;
                    return service;
                }
    

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 2016-06-09
      • 2014-11-27
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 2017-05-09
      • 2018-07-19
      • 2018-08-24
      相关资源
      最近更新 更多