Dav*_*ury 14 c# oauth-2.0 owin bearer-token asp.net-identity-2
我有一些与Bearer Token有关的问题.在Owin你可以保护这样的票Protect(ticket):
ClaimsIdentity identity = new ClaimsIdentity(Startup.OAuthServerOptions.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName));
Dictionary<string, string> properties = new Dictionary<string, string>();
properties.Add("UserId", user.Id);
properties.Add("UserName", user.UserName);
properties.Add("Role", "user");
AuthenticationProperties properties = new AuthenticationProperties(properties);
AuthenticationTicket ticket = new AuthenticationTicket(identity, properties);
DateTime currentUtc = DateTime.UtcNow;
DateTime expireUtc = currentUtc.Add(TimeSpan.FromHours(24));
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = expireUtc;
string token = OAuthAuthorizationServerOptions.AccessTokenFormat.Protect(ticket)
Run Code Online (Sandbox Code Playgroud)
现在令牌将是这样的:
nqak-9R6U64Owsm_lqn_mJzKc_Djd8iVnIw0EX77v5x2rybhf4m_zg_UnrsoO5BxDZQl0HWrSvvd4efa4ChNSf5rAGhd13aOXZlvwOJOZ5v_9bhRCq8A7tqHyiM6DqVVOyYs3lh2SU-wU1m85HH2IcYDtdTY3ijaKZ_QnP1nsqO5LRnnEL4upbETPW9zqWIZzZBX7_Y2cXi2v0K7WnlRor3gFKIZlU9J-NfidRpWXqq5744NfWWHalYADGS7eUWyuxPJCj9ykHYzaXFksJEXBw
我的问题:
如何生成/加密此令牌?
是否有人可以尝试使用令牌进行混乱并添加一些自定义声明?
例:
如果您有令牌字符串,则可以执行以下操作:
AuthenticationTicket ticket = OAuthAuthorizationServerOptions.AccessTokenFormat.Unprotect(token);
Run Code Online (Sandbox Code Playgroud)
现在,您可以向其添加自定义声明.例如,如果存在role具有值的声明,user则可以修改该声明并添加admin然后重新编码故障单,并获得具有管理员角色的令牌.
我实际上做了一些测试,在服务器上编码一个令牌然后尝试在另一个系统上修改它,但我不能Unprotect.因此,我想也许使用最初创建的机器密钥对票证进行加密/解密.但是,如果我尝试Unprotect从同一台机器上运行它.我可以解密并修改它.
有人可以解释一下这个过程吗?
Bad*_*dri 16
如何生成/加密此令牌?
可以使用对象SetDataProtectionProvider上的扩展方法设置数据保护提供程序IAppBuilder.如果不这样做,则使用主机的数据保护提供程序.对于IIS + ASP.NET,这是MachineKeyDataProtector在程序集中Microsoft.Owin.Host.SystemWeb.对于自托管,这将是DPAPI.基本上,令牌是加密的,然后MACed,这Protect()就是所有.
是否有人可以尝试使用令牌进行混乱并添加一些自定义>声明?
不,这是不可能的.机器中受保护的令牌不能在其他地方不受保护.例外情况是您拥有多台计算机的Web场.一台机器可以保护,如果后续请求进入其他机器,该机器应该具有解除保护的能力.使用DPAPI,这是不可能的.通过在所有机器中MachineKeyDataProtector具有相同的machineKey部分,这是可能的.但是如果你担心一些MITM能够做到这一点,那么不,这是不可能的.
| 归档时间: |
|
| 查看次数: |
12224 次 |
| 最近记录: |