精华内容
下载资源
问答
  • 什么是 Token 令牌

    千次阅读 2020-07-22 11:55:20
    Token, 令牌代表执行某些操作的权利的对象 访问令牌(Access token)表示访问控制操作主体的系统对象 邀请码,在邀请系统中使用 Token, Petri 网(Petri net)理论中的Token 密保令牌(Security token),或者硬件...

    在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思.

    Token, 令牌,代表执行某些操作的权利的对象

    访问令牌(Access token)表示访问控制操作主体的系统对象

    邀请码,在邀请系统中使用

    Token, Petri 网(Petri net)理论中的Token

    密保令牌(Security token),或者硬件令牌,例如U盾,或者叫做认证令牌或者加密令牌,一种计算机身份校验的物理设备

    会话令牌(Session token),交互会话中唯一身份标识符

    令牌化技术 (Tokenization), 取代敏感信息条目的处理过程

    token或者说令牌到底是什么东西,有什么作用,为什么token的中文翻译是“令牌”?

     

            在OAuth协议中,token是在输入了用户名和密码之后获取的,利用这个token你可以拥有查看或者操作相应的资源的权限。你有这些权限,是因为服务器知道你是谁(authentication)以后赋予你的,所以token这个东西,其实就是你的一个“代表”,或者说完全能代表你的“通行证”。

    在web中,可以通过

    var userAgent = window.navigator.userAgent;
     

    获取到token。

     

    登录令牌 Token 介绍

    Token值介绍 
    token 值: 登录令牌.利用 token 值来判断用户的登录状态.类似于 MD5 加密之后的长字符串. 
    用户登录成功之后,在后端(服务器端)会根据用户信息生成一个唯一的值.这个值就是 token 值. 
    基本使用: 
    在服务器端(数据库)会保存这个 token 值,以后利用这个 token 值来检索对应的用户信息,并且判断用户的登录状态. 
    用户登录成功之后,服务器会将生成的 token 值返回给 客户端,在客户端也会保存这个 token 值.(一般可以保存在 cookie 中,也可以自己手动确定保存位置(比如偏好设置.)). 
    以后客户端在发送新的网络请求的时候,会默认自动附带这个 token 值(作为一个参数传递给服务器.).服务器拿到客户端传递的 token 值跟保存在 数据库中的 token 值做对比,以此来判断用户身份和登录状态. 
    判断登录状态: 
    如果客户端没有这个 token 值,意味着没有登录成功过,提示用户登录. 
    如果客户端有 token 值,一般会认为登录成功.不需要用户再次登录(输入账号和密码信息). 
    token 值扩展: 
    token 值有失效时间: 
    一般的 app ,token值得失效时间都在 1 年以上. 
    特殊的 app :银行类 app /支付类 app :token值失效时间 15 分钟左右. 
    一旦用户信息改变(密码改变),会在服务器生成新的 token 值,原来的 token值就会失效.需要再次输入账号和密码,以得到生成的新的 token 值. 

    唯一性判断: 每次登录,都会生成一个新的token值.原来的 token 值就会失效.利用时间来判断登录的差异性.

    展开全文
  • 有网银的少年们一般都收到过银行给的这样一个令牌,俗称动态口令,在支付的时候输入自己的密码和动态口令上的动态密码,就能完成验证,银行就相信你不是坏人了,今天我们来简述一下这个动态口令令牌是个什么原理。...
    有网银的少年们一般都收到过银行给的这样一个令牌,俗称动态口令,在支付的时候输入自己的密码和动态口令上的动态密码,就能完成验证,银行就相信你不是坏人了,今天我们来简述一下这个动态口令令牌是个什么原理。
    

    PS:本篇阅读可能需要读者有一些密码学基础,预警一下。

    SID700.jpg

    RSA SecurID SID700

    如图的RSA SecurID SID700是当前市面上流行使用的动态口令令牌,在笔者准备资料的过程中发现国内描写动态口令的野生博客有不少谬误,其中大多是对银行这一套认证机制结构的不了解,所以首先要强调的是:

    在大众用户手中的动态口令令牌,并不使用任何对称或者非对称加密的算法,在整个银行的认证体系中,动态口令令牌只是一个一次性口令的产生器,在其中运行的主要计算仅包括时间因子的计算和散列值的计算。

    动态口令算法又叫一次性口令算法,英文写作OTP(One-Time Password Algorithm), 动态口令令牌使用的算法是OTP中的一类,TOTP(Time-Based One-Time Password Algorithm) — 时间同步型动态口令。

    时间同步型动态口令产生口令的时候和时间有关系,我们可以通过其工作的原理图来看一下:

    Screen Shot 2016-02-08 at 5.06.00 PM.png

    图示给出了动态口令的工作原理,突出了整个认证机制中的动态口令部分,我们可以清楚看到在最左边和最右边有完全相同的两个流程,这里分别代表了用户的令牌卡和银行服务器的验证机器做的工作。本文的重点就在这两个完全相同的流程上。

    在用户从银行手中拿到动态口令令牌卡的时候,在令牌卡的内部已经存储了一份种子文件(即图中钥匙所代表的seed),这份种子文件在银行的服务器里保存的完全一样的一份,所以对于动态口令令牌来说,这种方式是 share secret的。另外在令牌硬件上的设置中,假使有人打开了这个令牌卡,种子文件将会从令牌卡的内存上擦除(待考证)。

    令牌卡中有了种子文件,并实现了 TOTP 算法,在预先设置的间隔时间里它就能不断产生不同的动态口令,并显示到屏幕上,而银行服务器上跟随时间做同样的计算,也会得到和令牌卡同样的口令,用作认证。

    那么 TOTP 算法具体做了什么操作呢?在 RFC6238 中有详细的算法描述,这里也会做简单的叙述。

    TOTP 是来自 HOTP [RFC4226] 的变形,从统筹上看,他们都是将数据文件进行散列计算,只是HOTP的因子是事件因子,TOTP将因子换成了时间因子,具体的TOTP计算公式(其中的HMAC-SHA-256 也可能是 HMAC-SHA-512):

    TOTP = Truncate(HMAC-SHA-256(K,T))

    其中: K 为这里的种子文件内容; T 为计算出来的时间因子

    公式中的 HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。而公式中给出的哈希算法是 SHA-256,这种哈希算法目前并没有好的破解办法。

    令牌卡中预先设置了要显示的口令长度,TOTP 中的 Truncate 操作剪切获得口令。

    以上就是动态口令令牌卡的内部原理。

    几点补充:

    1. 时间同步型动态口令对令牌卡和服务器的时间同步要求很高,时间误差会造成整个令牌的失灵,所以每一次用户成功使用令牌认证,服务器都会做相应的时间误差矫正。

    2. 种子文件的产生使用了一种AES-128 变形而来的算法, AES-128 也是目前顶尖级的对称加密技术。

    3. 目前从加密技术上以及数学理论上整个银行机制的认证系统基本无解。

    4. 欢迎勘误。

    http://www.techug.com/what-principle
    展开全文
  • OAuth令牌

    2021-02-25 09:49:35
    OAuth令牌什么 令牌是OAuth事务的核心。令牌表示的是授权行为的结果:一个信息元组,包括资源拥有者、客户端、授权服务器、受保护资源、权限范围以及其他与授权决策有关的信息 OAuth核心规范不对令牌本身做任何...

    OAuth令牌

    OAuth令牌是什么

    令牌是OAuth事务的核心。令牌表示的是授权行为的结果:一个信息元组,包括资源拥有者、客户端、授权服务器、受保护资源、权限范围以及其他与授权决策有关的信息

    OAuth核心规范不对令牌本身做任何规定,使得OAuth能广泛的适用于各种部署场景。令牌可以与授权用户关联或者系统中所有用户关联,也可以不代表任何用户,令牌可以有内部结构,也可以是随机的无意义字符串。

    对于令牌存储在共享数据库中的情况,当受保护资源接收客户端令牌后会去用户中查找令牌,令牌本身不携带任何信息。对于非共享数据库情况,可以让令牌本身携带信息,而不用通过请求接口或查询数据库查找令牌信息。

    结构化令牌:JWT

    通过将所有必要的信息放到令牌内部,使得授权服务可以通过令牌本身间接与保护资源沟通。

    JWT的结构

    JSON Web令牌格式,或者叫JWT,提供一种在令牌中携带信息的简单方法,JWT的核心将一个JSON对象封装为一种用于网络传输的格式,通过句点分割令牌字符串,句点符号之间的值是一个经过Base64URL编码的JSON对象

    eyJoeXAioiJKV1QiLCJhbGciOiJub251In0.eyJzdWIioiIxMjM0NTY3oDkwIiwibmFtZSI6IkpvaG4gRG91IiwiYRtaW4iOnRydwv9.
    

    其中第一部分表示

        {
            "type": "JWT",
            "alg": "none"
        }
    

    这是JWT头部,type头告诉处理程序令牌第二部分是何种类型,alg头值为none表示一个未签名的令牌

    JWT声明

    标准JSON Web令牌声明:

    • iss:令牌颁发者,表示令牌由谁创建,在很多OAuth部署中会将它设为授权服务器的URL,该声明是一个字符串
    • sub:令牌主体,表示令牌是关于谁的,在很多OAuth部署中会将它设为资源拥有者的唯一标识。该声明是一个字符串
    • aud:令牌受众,表示令牌接收者,在很多OAuth部署中,它包含受保护资源的URI或者能够接收该令牌的受保护资源。该声明可以是一个字符串数组,如果只有一个值,也可以是一个不用数组包装的单个字符串
    • exp:令牌过期时间戳,他表示令牌将在何时过期,以便部署应用让令牌自行失效,该声明是一个整数,表示自UNIX新纪元(1970.1.1零点)以来的秒数
    • nbf:令牌生效时的时间戳,表示令牌什么时候开始生效,该声明为一个整数,表示UNIX新纪元以来的秒数
    • iat:令牌颁发时的时间戳,表示令牌是何时被创建的,该声明是一个整数,表示自UNIX新纪元以来的秒数
    • jti:令牌的唯一标识符,该令牌的值在令牌颁发者创建的每一个令牌中都是唯一的,为防止冲突,它通常是一个密码学随机值这个值相当于向结构化令牌中加入了一个攻击者无法获取的随机熵组件,有利于防止令牌猜测攻击和重放攻击

    我们也可以在其中添加其他所需字段

    在服务器上实现JWT

    要创建JWT,首先需要一个头部,指明该令牌是JWT且不带签名

        var header = {'type': 'JWT', 'alg': 'none'}
    

    接下来创建一个对象来承载JWT载荷,并根据我们所关心的令牌信息来指定字段

        var payload = {
            iss: 'http://localhost:9001/',
            sub: code.user ? code.user.sub : undefined,
            aud: 'http://localhost:9002/',
            iat: Math.floor(Date.now()/1000),
            exp: Math.floor(Date.now()/1000) + (5 * 60),
            jti: randomstring.generate(8)
        }
    

    将头部和载荷的JSON序列化为字符串,并对他们进行Base64URI编码,以句点符号作为连接符将他们连接起来

        var access_token = base64url.encode(JSON.stringify(header))
        + '.'
        + base64url.encode(JSON.stringify(payload))
        + '.';
    

    资源服务器从传入的令牌中获取信息,执行授权服务器令牌创建流程的逆操作来解析令牌:按照句点符号将字符串分开,得到不同部分,然后将第二部分从Base64URL解码,解析出一个JSON对象

        var tokenParts = inToken.split('.');
        var payload = JSON.parse(base64url.decode(tokenParts[1]));
    

    这样就得到了一个能在应用内进行检查的原生数据结构,我们要确保该令牌来自预期的颁发者;时间戳在合适的范围内;资源服务器是预期的令牌接收者

        if(payload.iss == 'http://localhost:9001/'){
            if((Array.isArray(payload.aud) && __.contains(payload.aud, 'http://localhost:9002/')) || payload.aud == 'http://localhost:9002/'){
                var now = Math.floor(Date.now() / 1000);
                if(payload.iat <= now){
                    if(payload.exp >= now){
                        req.access_token = payload;
                    }
                }
            }
        }
    

    令牌的加密保护:JOSE

    使用JSON对象的签名和加密标准对JWT结构令牌进行加密,这套规范以JSON为基础数据模型,提供了签名(JSON Web签名,或称JWS)、加密(JSON Web加密,或称JWE)以及密钥存储格式(JSON Web密钥,或称JWK)的标准。使用HMAC签名方案的对称签名和验证,以及使用RSA签名方案的非对称签名和验证,使用JWK来存储RSA公钥和私钥

    为了完成繁重的加密任务,我们会使用一个叫JSRSASign的JSON库,这个库提供了基本的签名和密钥管理功能,但不提供加密功能

    使用HS256的对称签名

        var sharedTokenSecret = 'shared OAuth token secret!';
    

    使用这个密钥对令牌签名,修改头部参数,指定签名方法为HS256

        var header = {'type': 'JWT', 'alg': 'HS256'};
    

    JOSE库要求在向签名函数传入数据前先进行JSON序列化(但不进行Base64URL编码),使用JOSE库和共享密钥对令牌进行HMAC签名算法,由于JOSE库的特殊需求,需要传入十六进制字符串形式的共享密钥,其他的库会对密钥格式有不同要求

        var access_token = jose.jws.JWS.sign(header.alg, 
            JSON.stringify(header),
            JSON.stringify(payload),
            new Buffer(sharedTokenSecret).toString('hex'));
    

    头部和载荷还是和之前一样,经过Base64URL编码的JSON字符串,签名被放在JWT格式的最后一个句点符号后面,是经过Base64URL编码的一组字节,签名JWT的整体结构为header.payload.signature

    修改受保护资源,让其能验证令牌的签名

        var sharedTokenSecret = 'shared OAuth token secret!';
    

    首先,解析令牌

        var tokenParts = inToken.split('.');
        var header = JSON.parse(base64url.decode(tokenParts[0]));
        var payload = JSON.parse(base64url.decode(tokenParts[1]));
    

    这一次要用到令牌头部,接下来要根据共享密钥来验证签名,这是我们对令牌内容的首次检查,我们使用的库要求在验证前将密钥转换成十六进制字符串格式

        if(jose.jws.JWS.verify(inToken,new Buffer(sharedTokenSecret).toString('hex'), [header.alg])){
    

    使用RS256的非对称签名

    如上在使用共享密钥时,创建签名和验证签名的系统使用同一个密钥,这样授权服务器和资源服务器都能生产令牌。使用公钥加密,授权服务器拥有公钥和私钥,可用于生成令牌,而受保护资源则只能访问授权服务器的公钥,用于验证令牌,但无法自己生成有效的令牌,我们使用JOSE库中的RS256签名方法,它的地层使用RSA算法

    首先需要在授权服务器上添加一对公钥和私钥,我们的密码对是2048位的RSA密钥,这是推荐的最小长度,本练习使用基于JSON的JWK来存储密钥,可以通过JOSE库直接读取

        RsaJsonWebKey jwk = RsaJwkGenerator.generateJwk(2048);
        jwk.setKeyId("authserver");
        final String publicKeyString = jwk.toJson(JsonWebKey.OutputControlLevel.PUBLIC_ONLY);
        final String privateKeyString = jwk.toJson(JsonWebKey.OutputControlLevel.INCLUDE_PRIVATE);
    

    使用私钥和RS256非对称签名方法,对内容进行签名::

        JwtClaims jwtClaims = new JwtClaims();
        jwtClaims.setIssuer("authserver");  //设置颁发者
        jwtClaims.setAudience("Audience");  //设置受众
        jwtClaims.setExpirationTimeMinutesInTheFuture(10); //过期时间
        jwtClaims.setGeneratedJwtId();  //令牌唯一标识,通常是一个密码学随机数
        jwtClaims.setIssuedAtToNow();   //令牌颁发时的时间
        jwtClaims.setNotBeforeMinutesInThePast(2); //代码生效时的时间
        jwtClaims.setSubject("aim");     //资源拥有者的唯一表标识
        jwtClaims.setStringClaim("payload", payload);
        jwtClaims.setStringClaim("header", header);
    
        JsonWebSignature jws = new JsonWebSignature();
        jws.setPayload(jwtClaims.toJson());
        jws.setKey(jwk.getRsaPrivateKey());   //私钥
        jws.setKeyIdHeaderValue(jwk.getKeyId());
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256); //指定签名算法
    
        String jwt = jws.getCompactSerialization();
    

    使用公钥和RS256非对称签名方法,对签名进行验签

        JwtConsumer jwtConsumer = new JwtConsumerBuilder().setRequireExpirationTime()
                    .setAllowedClockSkewInSeconds(30)
                    .setRequireSubject()
                    .setExpectedIssuer("authserver")    //期望的颁发者
                    .setExpectedAudience("Audience")    //期望的令牌接收者
                    .setVerificationKey(jwk.getRsaPublicKey())  //验签公钥
                    .setJweAlgorithmConstraints(new AlgorithmConstraints    (AlgorithmConstraints.ConstraintType.WHITELIST,
                            AlgorithmIdentifiers.RSA_USING_SHA256)) //指定验签算法
                    .build();
    
        JwtClaims jwtClaims2 = jwtConsumer.processToClaims(jwt);
    

    其他令牌保护方法

    基于JOSE的保护令牌方法提供了多种。然而仅签名是不够的,对于仅被签名的令牌,客户端还是可以偷窥令牌本身,从中获取它本无权知道的信息,除了签名之外,JOSE还提供了一个叫JWE的加密机制,包含几种不同的选项和算法,经过JWE加密的JWT不再只有3部分组成,而是由5部分组成。各个部分仍然使用Base64URL编码,只是载荷现在变成了一个经过加密的对象,没有正确的密钥无法读取其内容

    首先私钥签名

        //生成签名密钥对
        RsaJsonWebKey jwk = RsaJwkGenerator.generateJwk(2048);
        jwk.setKeyId("authserver");
    
        //私钥签名
        JwtClaims jwtClaims = new JwtClaims();
        jwtClaims.setIssuer("authserver");
        jwtClaims.setAudience("Audience");
        jwtClaims.setExpirationTimeMinutesInTheFuture(10);
        jwtClaims.setGeneratedJwtId();
        jwtClaims.setIssuedAtToNow();
        jwtClaims.setNotBeforeMinutesInThePast(2);
        jwtClaims.setSubject("token");
        jwtClaims.setStringClaim("payload", payload);
        jwtClaims.setStringClaim("header", header);
    
        JsonWebSignature jws = new JsonWebSignature();
        jws.setPayload(jwtClaims.toJson());
        jws.setKey(jwk.getRsaPrivateKey());
        jws.setKeyIdHeaderValue(jwk.getKeyId());
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);
    
        String jwt = jws.getCompactSerialization();
    
    然后公钥对签名内容加密::
    
        //生成密钥对
        RsaJsonWebKey jwk2 = RsaJwkGenerator.generateJwk(2048);
        jwk2.setKeyId("encryption");
        //对签名内容加密
        JsonWebEncryption jwe3 = new JsonWebEncryption();
        jwe3.setAlgorithmHeaderValue(KeyManagementAlgorithmIdentifiers.RSA_OAEP_256);
        jwe3.setEncryptionMethodHeaderParameter(ContentEncryptionAlgorithmIdentifiers.AES_256_CBC_HMAC_SHA_512);
        jwe3.setKey(jwk2.getRsaPublicKey());
        jwe3.setPayload(jwt);
        String token1 = jwe3.getCompactSerialization();
    

    私钥对加密内容解密::

        //对签名内容解密
        JsonWebEncryption jwe4 = new JsonWebEncryption();
        jwe4.setKey(jwk2.getPrivateKey());
        jwe4.setCompactSerialization(token1);
        String jwt2 = jwe4.getPayload();
    

    公钥对签名内容验签::

        //公钥验签
        JwtConsumer jwtConsumer = new JwtConsumerBuilder().setRequireExpirationTime()
                .setAllowedClockSkewInSeconds(30)
                .setRequireSubject()
                .setExpectedIssuer("authserver")
                .setExpectedAudience("Audience")
                .setVerificationKey(jwk.getRsaPublicKey())
                .setJweAlgorithmConstraints(new AlgorithmConstraints(AlgorithmConstraints.ConstraintType.WHITELIST,
                        AlgorithmIdentifiers.RSA_USING_SHA256))
                .build();
    
        JwtClaims jwtClaims2 = jwtConsumer.processToClaims(jwt2);
    

    在线获取令牌信息:令牌内省

    将令牌信息打包放入令牌本身,将导致令牌尺寸变得非常大,如果受保护资源完全依赖令牌本身所包含的信息,则一旦将有效的令牌生成并发布,想要撤回会非常困难

    内省协议

    OAuth令牌内省协议定义了一种机制,让受保护资源能够主动向授权服务器查询令牌状态。该协议是对OAuth的一个简单增强。授权服务器向客户端颁发令牌,客户端向受保护资源出示令牌,受保护资源向授权服务器查询令牌状态

    内省请求是发送给授权服务器内省端点的表单形式的HTTP请求,受保护资源在请求过程中需要向授权服务器进行身份认证,内省协议并未规定如何认证,例如,受保护资源使用ID和密码通过HTTP Basic进行省份认证,这与OAuth客户端向令牌端点进行身份认证方式一样。也可以使用单独的访问令牌完成此过程,UMA协议就是这样做的。

    内省请求的响应是一个JSON对象,用于描述令牌信息,它的内容与JWT的载荷相使,任何有效的JWT声明都可以包含在响应中

        HTTP 200 ok
        Content-type: application/json
        {
            "active": true,
            "scope": "foo bar baz",
            "client_id": "oauth-client-1",
            "username": "alice",
            "iss": "http://localhsot:9001/",
            "sub": "alice",
            "aud": "http://localhsot:9002/",
            "iat": 1440538696,
            "exp": 1440538996,
        }
    

    内省协议规范还在JWT的基础上增加了几个声明定义,其中最重要的是active声明,此声明告诉受保护资源当前令牌在授权服务器上是否有效,且是唯一必须返回的声明。由于OAuth令牌有多种部署类型,对有效令牌的定义并没有标准。但一般情况下,它的含义为令牌是由该授权服务颁发,还没有过期,也没有撤回,而且允许当前受保护资源获取它的信息。使用令牌内省会导致OAuth系统内的网络流量增加,为解决这个问题,允许受保护资源缓存给定令牌的内省请求结果,建议设置短于令牌生命周期的缓存有效期,以降低令牌被撤回但缓存还有效的可能性。

    展开全文
  • 访问令牌

    2017-07-18 17:32:00
    在登录的过程中,winlogon创建一个初始的令牌,该令牌代表了登录用户,winlogon将这个令牌附加到userinit.exe进程中。由于进程在默认情况下会继承创建者的令牌,因此用户的所有进程都拥有相同的令牌。  token的...

      访问令牌是安全引用监视器用来识别进程或者线程安全上下文的内核对象。安全上下文由描述特权、账号和进程或者线程所属的组等这些信息组成。在登录的过程中,winlogon创建一个初始的令牌,该令牌代表了登录用户,winlogon将这个令牌附加到userinit.exe进程中。由于进程在默认情况下会继承创建者的令牌,因此用户的所有进程都拥有相同的令牌。

      token的数据结构如下(winxp)

    kd> dt _TOKEN
    nt!_TOKEN
       +0x000 TokenSource      : _TOKEN_SOURCE
       +0x010 TokenId          : _LUID
       +0x018 AuthenticationId : _LUID
       +0x020 ParentTokenId    : _LUID
       +0x028 ExpirationTime   : _LARGE_INTEGER
       +0x030 TokenLock        : Ptr32 _ERESOURCE
       +0x038 AuditPolicy      : _SEP_AUDIT_POLICY
       +0x040 ModifiedId       : _LUID
       +0x048 SessionId        : Uint4B
       +0x04c UserAndGroupCount : Uint4B
       +0x050 RestrictedSidCount : Uint4B
       +0x054 PrivilegeCount   : Uint4B
       +0x058 VariableLength   : Uint4B
       +0x05c DynamicCharged   : Uint4B
       +0x060 DynamicAvailable : Uint4B
       +0x064 DefaultOwnerIndex : Uint4B
       +0x068 UserAndGroups    : Ptr32 _SID_AND_ATTRIBUTES
       +0x06c RestrictedSids   : Ptr32 _SID_AND_ATTRIBUTES
       +0x070 PrimaryGroup     : Ptr32 Void
       +0x074 Privileges       : Ptr32 _LUID_AND_ATTRIBUTES
       +0x078 DynamicPart      : Ptr32 Uint4B
       +0x07c DefaultDacl      : Ptr32 _ACL
       +0x080 TokenType        : _TOKEN_TYPE
       +0x084 ImpersonationLevel : _SECURITY_IMPERSONATION_LEVEL
       +0x088 TokenFlags       : Uint4B
       +0x08c TokenInUse       : UChar
       +0x090 ProxyData        : Ptr32 _SECURITY_TOKEN_PROXY_DATA
       +0x094 AuditData        : Ptr32 _SECURITY_TOKEN_AUDIT_DATA
       +0x098 OriginatingLogonSession : _LUID
       +0x0a0 VariablePart     : Uint4B
      token是长度可变的内核对象。其中有两个非常重要的成员,一个Group SID,指明了用户所属的组;另一个是特权列表,它决定了拥有该令牌的进程或者线程可以执行的操作。访问令牌的默认首要组和默认DACL将被应用到进程或者线程创建的对象中。

      token可分为首要令牌和模仿令牌,在0x80的偏移中可以得到令牌类型。

      该结构体的剩余部分提供了令牌的一些属性信息。如用windbg解析notepad进程的访问令牌

    kd> !token  e2122a20
    _TOKEN e2122a20
    TS Session ID: 0x1
    User: S-1-5-21-2000478354-261478967-682003330-1005(account2)
    Groups:
     00 S-1-5-21-2000478354-261478967-682003330-513(XP4DEBUG\None)
        Attributes - Mandatory Default Enabled
     01 S-1-1-0(\Everyone)
        Attributes - Mandatory Default Enabled
     02 S-1-5-32-545(\BUILTIN\Users)
        Attributes - Mandatory Default Enabled
     03 S-1-5-4(NT AUTHORITY\INTERACTIVE)
        Attributes - Mandatory Default Enabled
     04 S-1-5-11(NT AUTHORITY\Authenticated Users)
        Attributes - Mandatory Default Enabled
     05 S-1-5-5-0-511418(不懂是什么)
        Attributes - Mandatory Default Enabled LogonId
     06 S-1-2-0(\LOCAL)
        Attributes - Mandatory Default Enabled
    Primary Group: S-1-5-21-2000478354-261478967-682003330-513(XP4DEBUG\None)
    Privs:
     00 0x000000017 SeChangeNotifyPrivilege           Attributes - Enabled Default
    Authentication ID:         (0,808bf)
    Impersonation Level:       Anonymous
    TokenType:                 Primary
    Source: User32             TokenFlags: 0x11 ( Token in use )
    Token ID: 148ce3           ParentToken ID: 82838
    Modified ID:               (0, 148c79)
    RestrictedSidCount: 8      RestrictedSids: e2122b30
    在上面的分析中,Source就是TOKEN结构体+0x000偏移的值,指明了创建进程的实体。令牌的本地唯一标识符LUID由SRM创建并分配给令牌。Authentication ID是另一种类型的LUID,当令牌的创建者调用LsaLogonUser时分配给令牌。我们可以使用Authentication ID来判断不同进程是否同属于一个登陆会话。

      受限制的访问令牌则是把进程或者线程的首要访问令牌或者模仿访问令牌传递给CreateRestrictedToken函数得到的返回的访问令牌。该函数将通过以下三种方式限制访问令牌的权限,保护对象:

    1. 移除令牌的特权
    2. 将deny-only属性应用于令牌的sid中,这样进程或者线程将无法访问保护对象
    3. 指定一个受限制的SID列表,限制对保护对象的访问

      下图是以当前用户身份运行notepad程序后,进程访问令牌的属性,里面列举了受限制的访问令牌:

      

     

    转载于:https://www.cnblogs.com/debug-me/p/7201721.html

    展开全文
  • 令牌假冒

    2021-03-19 22:50:59
    假冒令牌可以假冒一个网络中的另一个用户进行各种操作。令牌包括登录会话的安全信息,如用户身份识别、用户组合用户权限。当一个用户登录Windows系统时,它被给定一个访问令牌作为它认证会话的一部分。例如,一个...
  • 一个令牌代表1个字节。 系统按设定的速率向桶中放置令牌,当桶中令牌满时,多出的令牌溢出,桶中令牌的数量不再增加。使用令牌 桶对流量规格进行评估时,如果桶中存在足够的令牌,则认为流量符合规格,否则称为不...
  • 令牌桶算法

    2019-08-29 15:18:03
    令牌桶算法是网络流量整形和速率限制中最常用的一种算法。用来控制发送到网络上的数据的数目,并允许突发数据的发送。 大小固定的令牌桶可自行以恒定的速率源源不断地产生令牌。如果令牌不被消耗,或者被消耗的速度...
  • 令牌窃取及防范

    2021-05-31 15:29:32
    令牌窃取什么令牌伪造令牌原理令牌窃取 什么令牌 令牌(Token)是指系统中的临时...访问令牌(Access Token)代表访问控制操作主题的系统对象。密保令牌(Security Token)也叫作认证令牌或硬件令牌,是一种用于实现计算
  • 动态令牌认证

    千次阅读 2014-03-13 19:31:30
    令牌可以使用户证明自己的身份后获得受保护资源的访问权。令牌会产生一个随机但专用于某个用户的动态口令,其数字只有对指定用户在特定的时刻有效。用户的静态密码+令牌的动态口令,使得用户的电子身份很难被模仿、...
  • struts令牌

    2014-09-17 12:24:15
    1. //验证事务控制令牌,会自动根据session中标识生成一个隐含input代表令牌,防止两次提交 2. 在action中:  //   // value="6aa35341f25184fd996c4c918255c3ae">   if (!isTokenValid(request))  ...
  • Token Bucket 令牌桶算法

    千次阅读 2018-10-16 21:02:27
    令牌桶这种控制机制基于令牌桶中是否存在令牌来指示什么时候可以发送流量。令牌桶中的每一个令牌代表一个字节。如果令牌桶中存在令牌,则允许发送流量;而如果令牌桶中不存在令牌,则不允许发送流量。因此,如果.....
  • JWT令牌验证

    千次阅读 2019-10-12 12:06:10
    JWT令牌验证1、jwt的由来及解决的问题2、jwt的细节处理 1、jwt的由来及解决的问题 2、jwt的细节处理 1、传统开发对资源的访问限制利用session完成图解 Map<String, Object> claims = new HashMap<String,...
  • 什么是用户token(令牌)-- 转

    万次阅读 2017-07-05 12:10:27
    那有没有想过,token或者说令牌到底是什么东西,有什么作用,为什么token的中文翻译是“令牌”?其实这个问题也困扰了我很长的时间。长久以来我都是从token的形式上猜测他应该是类似密码一样的东西,只不过是服务器...
  • oauth2令牌刷新 1.简介 在本教程中,我们将了解OAuth2令牌身份验证 ,以便只有经过身份验证的用户和应用程序才能获得有效的访问令牌,该令牌随后可用于访问服务器上的授权API(在OAuth术语中仅是受保护的资源)。 ...
  • Qos令牌桶技术原理

    2021-01-04 12:44:48
    令牌桶概述 配合软件队列使用。 单位是Byte而不是报文的个数,如果一个报文所需的Byte数超过了所剩余的令牌个数,就无法发送,也就是说一个令牌对应一个Byte。 令牌桶可以看作是一个存放一定数量令牌的容器。系统按...
  • 同步令牌和异步令牌by Jose Maria Macedo 由Jose Maria Macedo 令牌模型的另一个大问题:“交换媒介”令牌和速度问题 (Another big problem with token models: “Medium of Exchange” tokens and the velocity ...
  • csrf令牌by: Matt McEachern, Posh Co-founder and CTO 作者:Posh联合创始人兼CTO Matt McEachern CSRF, which stands for Cross-Site Request Forgery, is a common attack vector for vulnerable web ...
  • 令牌桶算法限流

    万次阅读 2016-04-23 21:36:15
    表示非常好奇,故此学习一下什么令牌桶算法。 1. 简介 令牌桶算法最初来源于计算机网络。在网络传输数据时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送。令牌桶算法就实现了这个...
  • 令牌环讲解

    千次阅读 2012-08-30 17:49:34
    令牌环  可替代以太网的最常见局域网技术是由IBM开发的一种网络技术,称作令牌环。以太网通过各次传输之间的随机空隙来控制对介质的访问,而令牌环网则采用一种严格的顺序访问方法。令牌环网将节点在逻辑上排列为...
  • QOS令牌桶概述

    2012-12-11 16:05:16
    令牌桶中的每一个令牌代表一个字节。如果令牌桶中存在令牌,则允许发送流量;而如果令牌桶中不存在令牌,则不允许发送流量。 令牌桶中的令牌不仅仅可以被移除,同样也可以往里添加,所以为了保证接口随时有数据...
  • 在网络中传输数据时,为了...我们用1块令牌代表发送1字节数据的资格,假设我们源源不断的发放令牌给程序,程序就有资格源源不断的发送数据,当我们不发放令牌给程序,程序就相当于被限流,无法发送数据了。接下来我们
  • 令牌及其概念

    千次阅读 2006-03-21 10:52:00
    令牌代表计算机中的登录会话。只要用户以交互方式或远程方式访问计算机,就会创建登录会话。令牌是一个处理程序,可用来对登录会话进行查询和操纵。如果具有令牌,您就可以得到登录会话所代表的用户,以及确定是否应...
  • token令牌的理解

    2020-04-16 14:37:41
    Token, 令牌代表执行某些操作的权利的对象 在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。 既是标记的意思,不同的用户有不同的标记,赋有不同的权力 生成 ...
  • 令牌桶算法RateLimiter

    千次阅读 2018-01-18 11:25:36
    令牌桶原理:令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。...
  • 令牌桶算法详解

    千次阅读 2020-07-17 15:20:15
    RateLimiter 有两个实现类:SmoothBursty 和 SmoothWarmingUp,其都是令牌桶算法的变种实现,区别在于 SmoothBursty 加令牌的速度是恒定的,而 SmoothWarmingUp 会有个预热期,在预热期内加令牌的速度是慢慢增加的,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,136
精华内容 11,654
关键字:

令牌代表什么