webapi的token验证方式_webapi token验证 - CSDN
精华内容
参与话题
  • ASP.NET WebApi 实现Token验证

    万次阅读 2018-11-27 14:20:41
     我们知道WEB网站的身份验证一般通过session或者cookie完成的,登录成功后客户端发送的任何请求都带上cookie,服务端根据客户端发送来的cookie来识别用户。  WEB API使用这样的方法不是很适合,于是就有了基于...

    转自:https://www.cnblogs.com/dukang1991/p/5627584.html

    基于令牌的认证

        我们知道WEB网站的身份验证一般通过session或者cookie完成的,登录成功后客户端发送的任何请求都带上cookie,服务端根据客户端发送来的cookie来识别用户。

        WEB API使用这样的方法不是很适合,于是就有了基于令牌的认证,使用令牌认证有几个好处:可扩展性、松散耦合、移动终端调用比较简单等等,别人都用上了,你还有理由不用吗?

        下面我们花个20分钟的时间来实现一个简单的WEB API token认证:

    Step 1:安装所需的NuGet包:

    打开NuGet包管理器控制台,然后输入如下指令:

    Install-Package Microsoft.AspNet.WebApi.Owin -Version 5.1.2
    Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0
    Install-Package Microsoft.AspNet.Identity.Owin -Version 2.0.1
    Install-Package Microsoft.Owin.Cors -Version 2.1.0

    Step 2 在项目根目录下添加Owin“Startup”类

    using System;
    using System.Web.Http;
    
    using Owin;
    using Microsoft.Owin;
    using Microsoft.Owin.Security.OAuth;
    using SqlSugar.WebApi;
    
    [assembly: OwinStartup(typeof(WebApi.Startup))]
    namespace WebApi
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                HttpConfiguration config = new HttpConfiguration();
                ConfigureOAuth(app);
    
                WebApiConfig.Register(config);
                app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
                app.UseWebApi(config);
            }
    
            public void ConfigureOAuth(IAppBuilder app)
            {
                OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
                {
                    AllowInsecureHttp = true,
                    TokenEndpointPath = new PathString("/token"),
                    AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
                    Provider = new SimpleAuthorizationServerProvider()
                };
                app.UseOAuthAuthorizationServer(OAuthServerOptions);
                app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
            }
        }
    }

    Step 3:在项目根目录下添加验证类 SimpleAuthorizationServerProvider,为了简单用户的验证部分我们省略掉;

    using System.Threading.Tasks;
    using System.Security.Claims;
    using Microsoft.Owin.Security.OAuth;
    
    namespace WebApi
    {
        /// <summary>
        /// Token验证
        /// </summary>
        public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
        {
            public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
            {
                await Task.Factory.StartNew(() => context.Validated());
            }
    
            public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
            {
                await Task.Factory.StartNew(() => context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }));
                /*
                 * 对用户名、密码进行数据校验
                using (AuthRepository _repo = new AuthRepository())
                {
                    IdentityUser user = await _repo.FindUser(context.UserName, context.Password);
    
                    if (user == null)
                    {
                        context.SetError("invalid_grant", "The user name or password is incorrect.");
                        return;
                    }
                }*/
    
                var identity = new ClaimsIdentity(context.Options.AuthenticationType);
                identity.AddClaim(new Claim("sub", context.UserName));
                identity.AddClaim(new Claim("role", "user"));
                identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName));
    
                context.Validated(identity);
    
            }
        }
    }

    Step 4:让CORS起作用

    在ASP.NET Web API中启用OAuth的Access Token验证非常简单,只需在相应的Controller或Action加上[Authorize]标记

            [Authorize]
            public ActionResult Index()
            {
                ViewBag.Title = "Home Page";
    
                return View();
            }

    Step 5 : 请求 Token

    获取token, POST   http://localhost:23477/token

    参数BODY x-www-form-urlencoded 格式:

    grant_type=password&username=admin&password=123456

    返回状态200 结果为

    Step 5 调用api

    只要在http请求头中加上Authorization:bearer Token就可以成功访问API就成功了:

    GET   http://localhost:58192/api/testapi/testapi

    Authorization : bearer 

    T5jF97t5n-rBkWcwpiVDAlhzXtOvV7Jw2NnN1Aldc--xtDrvWtqLAN9hxJN3Fy7piIqNWeLMNm2IKVOqmmC0X5_s8MwQ6zufUDbvF4Bg5OHoHTKHX6NmZGNrU4mjpCuPLtSbT5bh_gFOZHoIXXIKmqD3Wu1MyyKKNhj9XPEIkd9bl4E9AZ1wAt4dyUxmPVA_VKuN7UvYJ97TkO04XyGqmXGtfVWKfM75mNVYNhySWTg

     

      结果为:

     

    展开全文
  • Web Api Token验证

    千次阅读 2018-10-04 20:27:29
    我最近刚学习web api,所以写的一token认证比较简单 1、新建一个web api的项目 2、打开Provides中的这个类 3、在这个类的GrantResourceOwnerCredentials方法中进行认证修改 4、注释掉这个方法中的东西,自己...

    我最近刚学习web api,所以写的一token认证比较简单

    1、新建一个web api的项目

    2、打开Provides中的这个类

    3、在这个类的GrantResourceOwnerCredentials方法中进行认证修改

    4、注释掉这个方法中的东西,自己写认证

                UserDomain user = new UserDomain(new UserRepository());
                var login = user.Login(new LoginModel()
                {
                    UserEmail = context.UserName,
                    UserPassword = context.Password
                });
                if(login.Status)
                {
                    //var identity = new ClaimsIdentity(context.Options.AuthenticationType);
                    //identity.AddClaim(new Claim("username", model.UserName));
                    ClaimsIdentity claimsIdentity = new ClaimsIdentity(new List<Claim> {
                    new Claim("Id", login.UserId.ToString()),
                    new Claim(ClaimTypes.Role, login.RoleId.ToString()),
                    }, OAuthDefaults.AuthenticationType);
                    AuthenticationProperties properties = CreateProperties("Lian");
                    AuthenticationTicket ticket = new AuthenticationTicket(claimsIdentity, properties);
                    context.Validated(ticket);
                }
                else
                {
                    context.SetError("invalid_grant", "用户名或密码不正确。");
                    return;
                }

     

    wo写的里边连接了SQL server数据库

    5、在用到这个认证的controller或者action或者...中添加[Authorize]

     

    展开全文
  • token详解

    万次阅读 多人点赞 2016-08-30 17:47:23
    在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式。 以下几点特性会让你在程序中使用基于Token的身份验证 1.无状态、可扩展  2.支持移动设备  3.跨程序调用  4.安全 ...

    简介

    在Web领域基于Token的身份验证随处可见。在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式。

    以下几点特性会让你在程序中使用基于Token的身份验证

    1.无状态、可扩展

     2.支持移动设备

     3.跨程序调用

     4.安全

     

    那些使用基于Token的身份验证的大佬们

    大部分你见到过的API和Web应用都使用tokens。例如Facebook, Twitter, Google+, GitHub等。

     

    Token的起源

    在介绍基于Token的身份验证的原理与优势之前,不妨先看看之前的认证都是怎么做的。

      基于服务器的验证

       我们都是知道HTTP协议是无状态的,这种无状态意味着程序需要验证每一次请求,从而辨别客户端的身份。

    在这之前,程序都是通过在服务端存储的登录信息来辨别请求的。这种方式一般都是通过存储Session来完成。

    下图展示了基于服务器验证的原理

    tokens-traditional

    随着Web,应用程序,已经移动端的兴起,这种验证的方式逐渐暴露出了问题。尤其是在可扩展性方面。

     

    基于服务器验证方式暴露的一些问题

    1.Seesion:每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。

    2.可扩展性:在服务端的内存中使用Seesion存储登录信息,伴随而来的是可扩展性问题。

    3.CORS(跨域资源共享):当我们需要让数据跨多台移动设备上使用时,跨域资源的共享会是一个让人头疼的问题。在使用Ajax抓取另一个域的资源,就可以会出现禁止请求的情况。

    4.CSRF(跨站请求伪造):用户在访问银行网站时,他们很容易受到跨站请求伪造的攻击,并且能够被利用其访问其他的网站。

    在这些问题中,可扩展行是最突出的。因此我们有必要去寻求一种更有行之有效的方法。

     

    基于Token的验证原理

    基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中。

    这种概念解决了在服务端存储信息时的许多问题

      NoSession意味着你的程序可以根据需要去增减机器,而不用去担心用户是否登录。

    基于Token的身份验证的过程如下:

    1.用户通过用户名和密码发送请求。

    2.程序验证。

    3.程序返回一个签名的token 给客户端。

    4.客户端储存token,并且每次用于每次发送请求。

    5.服务端验证token并返回数据。

     每一次请求都需要token。token应该在HTTP的头部发送从而保证了Http请求无状态。我们同样通过设置服务器属性Access-Control-Allow-Origin:* ,让服务器能接受到来自所有域的请求。需要主要的是,在ACAO头部标明(designating)*时,不得带有像HTTP认证,客户端SSL证书和cookies的证书。

     

    下面的图片解释了过程:

    tokens-new

     

    当我们在程序中认证了信息并取得token之后,我们便能通过这个Token做许多的事情。

    我们甚至能基于创建一个基于权限的token传给第三方应用程序,这些第三方程序能够获取到我们的数据(当然只有在我们允许的特定的token)

     

    Tokens的优势

    无状态、可扩展

    在客户端存储的Tokens是无状态的,并且能够被扩展。基于这种无状态和不存储Session信息,负载负载均衡器能够将用户信息从一个服务传到其他服务器上。

    如果我们将已验证的用户的信息保存在Session中,则每次请求都需要用户向已验证的服务器发送验证信息(称为Session亲和性)。用户量大时,可能会造成

     一些拥堵。

    但是不要着急。使用tokens之后这些问题都迎刃而解,因为tokens自己hold住了用户的验证信息。

    安全性

    请求中发送token而不再是发送cookie能够防止CSRF(跨站请求伪造)。即使在客户端使用cookie存储token,cookie也仅仅是一个存储机制而不是用于认证。不将信息存储在Session中,让我们少了对session操作。 

    token是有时效的,一段时间之后用户需要重新验证。我们也不一定需要等到token自动失效,token有撤回的操作,通过token revocataion可以使一个特定的token或是一组有相同认证的token无效。

    可扩展性()

    Tokens能够创建与其它程序共享权限的程序。例如,能将一个随便的社交帐号和自己的大号(Fackbook或是Twitter)联系起来。当通过服务登录Twitter(我们将这个过程Buffer)时,我们可以将这些Buffer附到Twitter的数据流上(we are allowing Buffer to post to our Twitter stream)。

    使用tokens时,可以提供可选的权限给第三方应用程序。当用户想让另一个应用程序访问它们的数据,我们可以通过建立自己的API,得出特殊权限的tokens。

    多平台跨域

    我们提前先来谈论一下CORS(跨域资源共享),对应用程序和服务进行扩展的时候,需要介入各种各种的设备和应用程序。

    Having our API just serve data, we can also make the design choice to serve assets from a CDN. This eliminates the issues that CORS brings up after we set a quick header configuration for our application.

    只要用户有一个通过了验证的token,数据和资源就能够在任何域上被请求到。

              Access-Control-Allow-Origin: *       

    基于标准

    创建token的时候,你可以设定一些选项。我们在后续的文章中会进行更加详尽的描述,但是标准的用法会在JSON Web Tokens体现。

    最近的程序和文档是供给JSON Web Tokens的。它支持众多的语言。这意味在未来的使用中你可以真正的转换你的认证机制。

    总结

    这篇文章仅仅是介绍了为什么选择基于Token的身份验证,并且怎样使用它。

    下篇文章《剖析JSON Web Tokens》,我们将会用详细代码的例子来描述如何使用JSON Web Tokens认证Node API

    展开全文
  • 在ASP.NET WebService服务中可以通过SoapHead验证机制来实现,那么在ASP.NET WebApi中我们应该如何保证我们的接口安全呢?在上此分享课程中阿笨给大家带来了传统的基于Session方式Token签名...

    一、前言

    明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性。那么对于我们来说,如何确保数据的安全将会是需要思考的问题。在ASP.NET WebService服务中可以通过SoapHead验证机制来实现,那么在ASP.NET WebApi中我们应该如何保证我们的接口安全呢?在上此分享课程中阿笨给大家带来了传统的基于Session方式的Token签名验证,那么本次分享课程阿笨给大家带来另外一种基于JWT方式解决方案。如果您对本次分享课程《ASP.NET WebApi 基于JWT实现Token签名认证》感兴趣的话,那么请跟着阿笨一起学习吧。

    1.1、本次分享课程包含知识点如下:

    1)、对ASP.NET WebApi 如何实现身份认证进一步了解和学习。

    2)、掌握.NET中的JWT组件的基本运用。

    3)、.NET开源轻量级HTTP网络请求框架RestSharp在ASP.NET WebApi中的基本运用。

    4)、ASP.NET WebAPI自定义HTTP参数绑定支持多参数POST请求。(强烈推荐)

    5)、ASP.NET WebApi 基于JWT(Json Web Token)实现Token签名认证。

    1.2、一句话总结:今天我们要解决的问题?

    ASP.NET WebAPI如何保证客户端以安全的方式进行访问。

    废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运

    二、概念名称含义介绍

    2.1、什么是JWT?

    2.2、JWT长什么样?

    2.3、JWT的构成

    三、WebApi如何实现JWT实现Token签名认证原理讲解

    3.1、ASP.NET WebAPI如何保证客户端以安全的方式进行访问

    3.2、基于JWT实现Token签名认证基本思路如下:

    四、实战源码在线实例演示

    登录

     

    基于JWT实现Token签名认证

     

    JWT在线验证

    五、总结

     

    作者:阿笨 

          官方QQ群:422315558 跟着阿笨一起玩NET 574187616跟着阿笨一起玩NET(二) 967920586跟着阿笨一起玩ASP.NET 

          【网易云课堂主页】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628

          【腾讯课堂主页】:https://abennet.ke.qq.com/

          【微信公众号】:http://dwz.cn/ABenNET 

     

    展开全文
  • webapi鉴权使用token令牌

    千次阅读 2018-07-08 22:51:14
    一为什么使用Token验证:在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认 证,那么这就需要用户提供一些信息,比如...
  • webapi token、参数签名是如何生成的

    万次阅读 2019-08-09 14:43:43
    API接口保障安全性原则:1.有调用者身份2.请求的唯一性3.请求的参数不能被篡改4.请求的有效时间 在刚接触接口开发时,可能脑子里压根就没有这个接口调用安全性的原则,但常识性的经验告诉我们,每一个请求都应该...
  • ASP.NET WEBAPI实现微信接入验证

    万次阅读 2019-11-19 19:12:38
    ASP.NET WEBAPI实现微信接入验证首先你需要一个微信公众号,很重要的是你需要完成认证,这点非常重要,如果不认证优先功能无法实现。 当你完成公众号的基本设定后,我们需要为开发做第一件事情:基本配置。下面我...
  • 前后端分离:WebAPI+Vue开发——远程数据请求axios 前后端分离:WebAPI+Vue开发——跨域设置 前后端分离:WebAPI+Vue开发——身份认证 存储用户身份可以用Cache内存或者Redis,本文实现用的是Redis。 1、在登录...
  • WebApi 增加身份验证 (OAuth 2.0方式

    万次阅读 2018-05-05 10:26:14
    1,在Webapi项目下添加如下引用:Microsoft.AspNet.WebApi.OwinOwinMicrosoft.Owin.Host.SystemWebMicrosoft.Owin.Security.OAuthMicrosoft.Owin.Security.CookiesMicrosoft.AspNet.Identity.OwinMicrosoft.Owin....
  • WebApi中的Session与Token间的处理对接

    千次阅读 2017-05-24 10:38:26
     session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。session 也是类似的道理,服务器要知道当前发请求给...
  • API接口权限认证OAuth2.0流程(用户访问客户端并将其导向认证服务器->用户授权->认证服务器将用户导向客服端redirectURL并附带授权code->客户端将code和redirecURL发送给验证服务器申请token->验证服务器验证...
  • Token验证详解

    万次阅读 2017-06-23 14:43:31
    为什么使用Token验证:  在Web领域基于Token的身份验证随处可见。在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式。  以下几点特性会让你在程序中使用基于Token的身份验证  1....
  • .Net WebAPI JWT身份验证

    万次阅读 2018-11-07 17:32:11
    一、开发环境 ...1、使用VS2017 创建.netframework项目,选择WebApi 2、从Nuget包中搜索并安装JWT 3、在Models中创建AuthInfo.cs、LoginRequest.cs、TokenInfo.cs三个类 using System; u...
  • WebApi安全性 使用TOKEN+签名验证

    千次阅读 2017-10-18 16:23:41
    首先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过...为了保证数据在通信时的安全性,我们可以采用TOKEN+参数签名的方式来进行相关验证
  • token验证技术的原理和简单实现

    万次阅读 2018-12-14 09:37:38
    为什么使用Token验证:  在Web领域基于Token的身份验证随处可见。在大多数使用Web API的互联网公司中,token是多用户下处理认证的最佳方式。  以下几点特性会让你在程序中使用基于Token的身份验证  1.无状态、可...
  • 自己最近无聊在搞web api 安全认证这块,看到了这两篇文章,感觉写的非常到位,这一篇是对上一篇 WebApi安全性 使用TOKEN+签名验证 进行的一些讲解! 本篇博文中的所有代码均来自上述链接,如果你觉得有帮助,请...
  • 今天总结一种最简单的方式,来保障webapi不被别人随便调用。这里总结下identityserver4的使用。 IdentityServer4 是最新也是比较容易上手的一个开源框架,你要是从IdentityServer3开始用,会很容易头大,搞不清楚...
  • RESTful API使用JWT做无状态的身份认证

    千次阅读 2020-06-29 18:36:38
    JWT设计RESTful架构的前后端,天然要求API是无状态的,JWT(JSON Web Token)简单易用,适合在分布式系统中做API无状态的身份认证。jwt由Header、Payload、Signature三部分组成,使用 . 分割开,一个JWT形式:Header....
  • Laravel5.3~5.5 使用默认api验证登陆

    千次阅读 2017-12-22 14:11:29
    讲解如何使用laravel5.3框架默认的api验证登陆。
1 2 3 4 5 ... 20
收藏数 34,240
精华内容 13,696
关键字:

webapi的token验证方式