我正在开发一个使用Java和AngularJS开发的Web应用程序,并select实现令牌authentication和授权。 出于练习的目的,我已经到了将凭据发送到服务器的地步,生成随机令牌存储并将其发送回客户端。 在服务器的每个请求中,我都将标记附加在标题中,并且完美地工作。 对于authentication的angular度来看是完美的,并不需要更多。 但是,我现在想跟踪用户types(admin,普通用户…),以及它的id,或任何其他唯一字段; 据我所知,我必须encryption在令牌,我在发送回login到客户端的过程中。 那是对的吗? 是否有任何JWT库,您可以生成,encryption和解密这些令牌? 链接到图书馆的API和Maven的依赖将非常感激。 谢谢
我想从交stream#WPF桌面应用程序执行一个post到我的WebAPI。 不pipe我做什么,我都会得到 { “错误”: “unsupported_grant_type”} 这是我所尝试过的(我试过了我能find的所有东西): 另外开发web api目前活跃testing: http : //studiodev.biz/ 基地http客户端对象: var client = new HttpClient() client.BaseAddress = new Uri("http://studiodev.biz/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain")); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*")); 用下面的发送方法: var response = await client.PostAsJsonAsync("token", "{'grant_type'='password'&'username'='username'&'password'='password'"); var response = await client.PostAsJsonAsync("token", "grant_type=password&username=username&password=password"); 之后,失败了,我做了一些Googlesearch,并尝试: LoginModel data = new LoginModel(username, password); string json = JsonConvert.SerializeObject(data); await client.PostAsync("token", new […]
在我们的网站上,我们向用户提供基于其私人信息(通过表格给出)的模拟。 我们希望稍后让他们恢复模拟结果,但不要强制他们创buildlogin名/密码帐户。 我们曾想过给他们发送一封带有链接的电子邮件,从中可以得到他们的结果。 但是,自然,我们必须保护这个URL,因为私人数据处于危险之中。 所以我们打算在URL中传递一个令牌(比如40个字母和数字的组合,或者一个MD5哈希),并使用SSL。 最后,他们会收到这样的电子邮件: 嗨, 通过https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn获取结果 你怎么看待这件事? 它足够安全吗? 你会怎么build议我为代币生成? 在https请求中传递URL参数怎么样?
(从这个线程产生,因为这是一个真正的问题,而不是特定于NodeJS等) 我正在使用身份validation来实现REST API服务器,并且我已经成功实现了JWT令牌处理,以便用户可以通过带有用户名/密码的/ login端点进行login,然后从服务器密钥生成JWT令牌并返回给客户。 然后令牌在每个经过validation的API请求中从客户端传递到服务器,服务器密钥用于validation令牌。 但是,我正在试图了解确切地说明如何以及在多大程度上validation令牌的最佳实践,以build立真正安全的系统。 究竟应该参与“validation”令牌? 使用服务器密钥validation签名是否足够,还是应该交叉检查服务器中存储的某些数据的令牌和/或令牌载荷? 基于令牌的authentication系统只会像每个请求中传递用户名/密码一样安全,只要获取令牌的难度要高于获取用户的密码。 但是,在我看到的例子中,生成令牌所需的唯一信息是用户名和服务器端的秘密。 这是否意味着假设一个恶意用户获得了有关服务器机密的知识,他现在可以代表任何用户生成令牌,从而不仅可以访问给定用户,而且密码是获得,但实际上所有的用户帐户? 这带来了我的问题: 1)JWT令牌validation是否应限于validation令牌本身的签名,仅依赖服务器秘密的完整性,还是附带单独的validation机制? 在某些情况下,我已经看到了令牌和服务器会话的组合使用,在通过/ login端点成功login后,会话被build立。 API请求validation令牌,并将令牌中发现的解码数据与会话中存储的一些数据进行比较。 但是,使用会话意味着使用cookie,从某种意义上讲,它违背了使用基于令牌的方法的目的。 这也可能会导致某些客户的问题。 可以想象,服务器将所有令牌当前正在使用的内存caching或类似内容保留下来,以确保即使服务器秘密受到攻击,攻击者可以生成“有效”令牌,但只能通过/ login端点生成的确切令牌会被接受。 这是合理的还是多余的/矫枉过正的? 2)如果JWT签名validation是validation令牌的唯一手段,意味着服务器秘密的完整性是突破点,那么应该如何pipe理服务器机密? 从环境variables中读取并在每个已部署的堆栈上创build(随机化?)一次? 重新定制或定期轮换(如果是的话,如何处理在循环之前创build的现有有效令牌,但需要在循环后进行validation,如果服务器在任何给定的时间保持当前秘密和先前的秘密, ? 别的东西? 当涉及到服务器机密被泄密的风险时,也许我只是过于偏执狂,这当然是一个更加普遍的问题,需要在所有密码的情况下解决。
我无法使用我的代码获取我的刷新标记。 我只能得到我的访问令牌,令牌types等,我已经按照我的loginurlaccess_type =离线一些教程 echo "<a href='https://accounts.google.com/o/oauth2/auth?" . "access_type=offline&client_id=123345555.apps.googleusercontent.com& " . "scope=https://www.googleapis.com/auth/calendar+https://www.googleapis.com/auth/plus.me&response_type=code& " . "redirect_uri=http://www.sample.com/sample.php&state=/profile'>Google</a>"; 和我的领域获取访问令牌 $fields=array( 'code'=> urlencode($authcode), 'client_id'=> urlencode($clientid), 'client_secret'=> urlencode($clientsecret), 'redirect_uri'=> urlencode($redirecturi), 'grant_type'=> 'authorization_code', ); 但我无法获取refresh_token,只有access_token,token_type,id_token和expires_in。
我想为忘记密码生成标识符。 我读过,我可以通过使用mt_rand()的时间戳来做到这一点,但有些人说,时间戳可能不是唯一的每一次。 所以我有点困惑。 我可以用这个时间戳吗? 题 生成自定义长度的随机/唯一标记的最佳做法是什么? 我知道这里有很多问题,但是在阅读了不同的人的不同意见后,我越来越困惑。
我在短时间内多次使用刷新令牌进行testing,但是我不知道Google刷新令牌是否过期了? 或者我可以调用相同的刷新令牌来长时间(一个星期甚至几个月)再次获得另一个访问令牌?
我将使用oAuth从谷歌获取邮件和联系人。 我不想每次都要求用户login以获取访问令牌和秘密。 根据我的理解,我需要将它们与我的应用程序一起存储在数据库或SharedPreferences 。 但是我有点担心安全方面的问题。 我读过,你可以encryption和解密令牌,但是攻击者很容易只是反编译你的apk和类并获得encryption密钥。 在Android中安全存储这些令牌的最佳方法是什么?
我怎样才能结合passport本地返回一个成功的身份validationJWT令牌? 我想使用node-jwt-simple并查看passport.js我不知道如何去做。 var passport = require('passport') , LocalStrategy = require('passport-local').Strategy; passport.use(new LocalStrategy( function(username, password, done) { User.findOne({ username: username }, function(err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username.' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'Incorrect password.' }); } return done(null, […]
从我目前所了解到的情况来看,令牌的目的是防止攻击者伪造表单提交。 例如,如果一个网站有一个表单,将添加的项目input到您的购物车,并且攻击者可以用您不想要的项目将您的购物车垃圾邮件。 这是有道理的,因为可能有多个有效的购物车forms的input,攻击者所要做的就是知道网站正在销售的物品。 我了解这种情况下的令牌是如何工作和增加安全性的,因为它们确保用户实际填写并按下了添加到购物车中的每个物品的“提交”button。 但是,令牌是否将任何安全性添加到需要用户名和密码的用户login表单中? 由于用户名和密码是非常独特的,攻击者必须知道这两个为了login伪造工作(即使你没有设置令牌),如果攻击者已经知道,他可以login到网站本人。 更不用说,使用户login自己的CSRF攻击无论如何不会有任何实际的目的。 我对CSRF攻击和令牌的理解是否正确? 他们是无用的用户login表单,我怀疑?