Questions tagged «jwt»

JSON Web令牌(JWT,发音为“ jot”)是一种新兴的基于令牌的身份验证类型,用于基于空间的环境(例如HTTP授权标头)中。

5
如何使用基于JWT的身份验证处理文件下载?
我正在Angular中编写一个webapp,其中身份验证是通过JWT令牌处理的,这意味着每个请求都带有一个“ Authentication”标头,其中包含所有必要的信息。 这对于REST调用非常有效,但是我不明白如何处理后端托管的文件的下载链接(这些文件位于托管Web服务的同一服务器上)。 我不能使用常规<a href='...'/>链接,因为它们将不带有任何标题,并且身份验证将失败。同样的咒语window.open(...)。 我想到的一些解决方案: 在服务器上生成一个临时的不安全的下载链接 将身份验证信息作为url参数传递并手动处理情况 通过XHR获取数据并保存文件客户端。 以上所有都不令人满意。 1是我现在正在使用的解决方案。我不喜欢它有两个原因:首先,它不是理想的安全方式;其次,它可以工作,但是特别是在服务器上,它需要进行大量工作:要下载某些东西,我需要调用一个生成新的“随机”服务的服务网址,将其存储在某个位置(可能在数据库上)一段时间,然后将其返回给客户端。客户端获取url,并使用window.open或类似的名称。当请求时,新的url应该检查它是否仍然有效,然后返回数据。 2似乎至少要完成同样的工作。 3即使使用可用的库也似乎需要大量工作,并且存在许多潜在问题。(我需要提供自己的下载状态栏,将整个文件加载到内存中,然后要求用户将文件保存在本地)。 但是,该任务似乎是一项非常基本的任务,因此我想知道是否可以使用更简单的方法。 我不一定要寻找“角度方式”的解决方案。普通的Javascript就可以了。

3
使用JWT进行跨域身份验证的单点登录流程
网络上有很多有关使用JWT(Json Web Token)进行身份验证的信息。但是我仍然没有清楚地说明在多域环境中将 JWT令牌用于单点登录解决方案时的流程。 我为一家在不同主机上有很多站点的公司工作。让我们使用example1.com和example2.com。我们需要一个单一的登录解决方案,这意味着如果用户在example1.com上进行了身份验证,我们希望他也可以在example2.com上进行自动身份验证。 通过使用OpenId Connect流,我了解到要在example1.com上进行身份验证的用户将首先被重定向到身份验证服务器(或OP:“ OpenId Provider”)。用户在该服务器上进行身份验证,然后使用签名的JWT令牌将其重定向回原始的example1.com网站。(我知道还有另一种流返回中间令牌,该中间令牌以后可以将其本身交换为真正的JWT令牌,但是我认为这对我们而言不是必需的)... 因此,现在用户又回到了example1.com并通过了身份验证!他可以发出请求,并在Authentication标头中传递JWT令牌,并且服务器能够验证已签名的JWT,因此能够识别用户。真好! 第一个问题: JWT令牌应如何存储在客户端上?再次有很多关于此的信息,人们似乎同意使用Web Storage是行之有效的方法,而不是过时的方法cookies。我们希望JWT在浏览器重启之间保持不变,所以让我们使用Local Storage,而不是Session Storage... 现在,用户可以重新启动浏览器,并且只要JWT令牌未过期,他仍将在example1.com上进行身份验证! 另外,如果example1.com需要向我们的另一个域发出Ajax请求,则我知道配置CORS会允许这样做。但是我们的主要用例不是跨域请求,而是一个单一的登录解决方案! 因此,主要问题是: 现在,如果用户转到example2.com并且我们希望使用他已经拥有的JWT令牌对他进行身份验证,那么流程应该是什么?Local Storage似乎不允许跨域访问,因此此时浏览器无法读取JWT令牌向example2.com发出请求! 应该 : 再次将用户重定向到身份验证服务器?当用户通过example1.com进行身份验证时, 身份验证服务器可能已在该用户上设置了cookie,因此example2.com的此新身份验证请求可以使用该cookie来查看该用户是否已通过身份验证,并立即将其重定向回 example2.com。使用相同的JWT令牌? 还是可以在example2.com上的浏览器访问JWT令牌而不必再次进入身份验证服务器?我看到有交叉存储解决方案,但是广泛使用了吗?它们是跨域SSO环境的建议解决方案吗? 我们不需要任何花哨的东西,我们会对使用最广泛的解决方案感到满意!

5
JWT vs Cookies,用于基于令牌的身份验证
我读了一些有关“ JWT vs Cookie”的帖子,但它们只会使我更加困惑。 我想澄清一下,当人们谈论“基于令牌的身份验证与cookie”时,此处的cookie仅指会话cookie?我的理解是cookie就像一种媒介,它可以用于实现基于令牌的身份验证(在客户端存储可以识别已登录用户的内容)或基于会话的身份验证(在客户端存储常量)与服务器端的会话信息匹配) 为什么我们需要JSON Web令牌?我使用标准cookie来实现基于令牌的身份验证(不使用会话ID,不使用服务器内存或文件存储)Set-Cookie: user=innocent; preferred-color=azure:,我观察到的唯一区别是JWT既包含有效负载又包含签名 ...而您可以选择在HTTP标头的签名 Cookie 或纯文本 Cookie 之间。在我看来签署的cookie()cookie:'time=s%3A1464743488946.WvSJxbCspOG3aiGi4zCMMR9yBdvS%2B6Ob2f3OG6%2FYCJM'更节省空间,唯一的缺点是,客户端无法读取该令牌,只有能服务器...但我认为这是很好的,因为就像要求在智威汤逊是可选的,它不是必需的令牌有意义

5
服务器端处理JWT令牌的最佳实践
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 去年关闭。 改善这个问题 (从此线程产生,因为这实际上是一个问题,并不特定于NodeJS等) 我正在通过身份验证实现REST API服务器,并且已经成功实现了JWT令牌处理,以便用户可以使用用户名/密码通过/ login端点登录,然后从服务器机密生成JWT令牌并将其返回给客户。然后,在每个经过身份验证的API请求中,将令牌从客户端传递到服务器,然后使用服务器机密来验证令牌。 但是,我试图了解关于如何以及在多大程度上验证令牌的最佳实践,以构成一个真正安全的系统。“验证”令牌应该包含什么内容?可以使用服务器秘密来验证签名是否足够,还是我还应该对照服务器中存储的某些数据来交叉检查令牌和/或令牌有效载荷? 基于令牌的身份验证系统仅与在每个请求中传递用户名/密码一样安全,只要获取令牌比获取用户密码同等或更困难。但是,在我看到的示例中,生成令牌所需的唯一信息是用户名和服务器端机密。这不是说,假设一分钟内恶意用户获得了服务器机密知识,他现在就可以代表任何用户产生令牌,从而不仅可以访问一个给定的用户,而且如果密码为获得,但实际上是所有用户帐户? 这使我想到了以下问题: 1)JWT令牌验证是否应仅限于验证令牌本身的签名,仅依靠服务器机密的完整性或通过单独的验证机制进行验证? 在某些情况下,我已经看到了令牌和服务器会话的组合使用,其中在通过/ login端点成功登录后会建立一个会话。API请求会验证令牌,还将令牌中找到的解码数据与会话中存储的某些数据进行比较。但是,使用会话意味着使用cookie,从某种意义上说,它违反了使用基于令牌的方法的目的。这也可能给某些客户带来麻烦。 可以想象服务器将当前所有令牌都保留在内存缓存或类似的内存中,以确保即使服务器机密受到威胁,攻击者也可以生成“有效”令牌,只有通过/ login端点生成的确切令牌将被接受。这是合理的还是仅仅是多余/过度的? 2)如果JWT签名验证是验证令牌的唯一方法,这意味着服务器密钥的完整性是切入点,那么应该如何管理服务器密钥?从环境变量读取并为每个部署的堆栈创建一次(随机化?)?定期更新或轮换(如果这样,如何处理在轮换之前创建但在轮换之后需要验证的现有有效令牌,如果服务器在任何给定时间保留当前和先前的机密就足够了) ?还有吗 当涉及到服务器机密受到威胁的风险时,我可能只是过于偏执,这当然是一个更普遍的问题,需要在所有加密情况下解决……


3
JWT和Bearer Token有什么区别?
我正在学习有关授权的一些​​知识,例如Basic,Digest,OAuth2.0,JWT和Bearer Token。 现在我有一个问题。 您知道JWT被用作OAuth2.0标准中的Access_Token。JWT出现在RFC 7519上,而Bearer Token出现在RFC 6750上。 例如,承载: Authorization: Bearer <token> 我曾经通过AJAX将令牌发送到服务器,或者将令牌添加到url的查询字符串中。我知道令牌也可以通过将其添加到请求标头中来发送。这是否意味着应该将令牌添加到Authorization Bearer标头中? 您能告诉我JWT和Bearer Token之间的关系吗?非常感谢。
105 oauth  token  jwt 

2
使用JWT验证套接字io连接
如何验证socket.io连接?我的应用程序使用来自另一台服务器(python)的登录端点来获取令牌,每当用户在节点侧打开套接字连接时如何使用该令牌? io.on('connection', function(socket) { socket.on('message', function(message) { io.emit('message', message); }); }); 和客户端: var token = sessionStorage.token; var socket = io.connect('http://localhost:3000', { query: 'token=' + token }); 如果令牌是在python中创建的: token = jwt.encode(payload, SECRET_KEY, algorithm='HS256') 如何使用此令牌对节点中的套接字连接进行身份验证?
105 node.js  socket.io  jwt  token 

4
JWT(Json Web令牌)受众“ aud”与Client_Id的区别是什么?
我正在我的认证服务器中实现OAuth 2.0 JWT access_token。但是,我不清楚JWT aud声明和client_idHTTP标头值之间的区别是什么。他们是一样的吗?如果没有,您能否解释两者之间的区别? 我的怀疑是aud应该引用资源服务器,而client_id应该引用身份验证服务器识别的客户端应用程序之一(即Web应用程序或iOS应用程序)。 在我当前的情况下,我的资源服务器也是我的Web应用程序客户端。
103 oauth  oauth-2.0  jwt 

6
如何解码JWT令牌?
我不了解该库的工作方式。请问你能帮帮我吗 ? 这是我的简单代码: public void TestJwtSecurityTokenHandler() { var stream = "eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJJU1MiLCJzY29wZSI6Imh0dHBzOi8vbGFyaW0uZG5zY2UuZG91YW5lL2NpZWxzZXJ2aWNlL3dzIiwiYXVkIjoiaHR0cHM6Ly9kb3VhbmUuZmluYW5jZXMuZ291di5mci9vYXV0aDIvdjEiLCJpYXQiOiJcL0RhdGUoMTQ2ODM2MjU5Mzc4NClcLyJ9"; var handler = new JwtSecurityTokenHandler(); var jsonToken = handler.ReadToken(stream); } 这是错误: 该字符串必须采用紧凑的JSON格式,格式为:Base64UrlEncodedHeader.Base64UrlEndcodedPayload.OPTIONAL,Base64UrlEncodedSignature'。 如果您在jwt.io网站中复制流,则可以正常工作:)
103 c#  .net  jwt 

9
C#中是否有任何JSON Web令牌(JWT)示例?
我觉得我在这里服用疯药。通常,对于任何给定的任务,总会有一百万个库和样本在网上浮动。我试图通过使用JSON网络令牌(JWT)的描述来实现与谷歌的“服务帐户”验证这里。 但是,只有PHP,Python和Java中的客户端库。即使在Google身份验证之外搜索JWT示例,也只有关于JWT概念的和草稿。这真的那么新,可能是Google专有系统吗? 我可以设法解释的最接近的Java示例看起来非常密集且令人生畏。我至少可以从C#那里开始。任何帮助都会很棒!
101 c#  oauth  oauth-2.0  jwt 

2
使用System.IdentityModel.Tokens.Jwt解码和验证JWT令牌
我一直在使用JWT库来解码Json Web令牌,并想切换到Microsoft的官方JWT实现System.IdentityModel.Tokens.Jwt。 该文档非常稀疏,因此我很难确定如何完成对JWT库所做的工作。在JWT库中,有一个Decode方法,它采用base64编码的JWT,并将其转换为JSON,然后可以反序列化。我想使用System.IdentityModel.Tokens.Jwt做类似的事情,但是经过大量的挖掘之后,仍然无法弄清楚如何做。 对于它的价值,我正在从cookie中读取JWT令牌,以与Google的身份框架一起使用。 任何帮助,将不胜感激。
100 .net  wif  jwt 

4
JWT应该存储在localStorage还是cookie中?[重复]
这个问题已经在这里有了答案: 在浏览器中的何处存储JWT?如何防范CSRF? (5个答案) 2个月前关闭。 为了使用JWT保护REST API,根据某些资料(如本指南和此问题),JWT可以存储在任一localStorage中或Cookies中。根据我的理解: localStorage受XSS限制,通常不建议在其中存储任何敏感信息。 用 Cookie,我们可以应用标志“ httpOnly”,以减轻XSS的风险。但是,如果我们要从后端的Cookies中读取JWT,则需要接受CSRF。 因此,基于以上前提,最好将JWT存储在Cookies中。在对服务器的每个请求中,都将使用Cookie方案从Cookie中读取JWT并将其添加到Authorization标头中。然后,服务器可以验证请求标头中的JWT(与从Cookie中读取JWT相反)。 我的理解正确吗?如果是这样,上述方法是否涉及安全性?还是实际上我们可以首先使用localStorage逃脱?


3
本地护照和node-jwt-simple
如何在成功进行身份验证时结合本地护照以返回JWT令牌? 我想使用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 …

2
使用多个JWT承载身份验证
是否可以在ASP.NET Core 2中支持多个JWT令牌发行者?我想提供一个用于外部服务的API,并且需要使用两种JWT令牌来源-Firebase和自定义JWT令牌发行者。在ASP.NET核心中,我可以为Bearer身份验证方案设置JWT身份验证,但只能为一个授权设置: services .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.Authority = "https://securetoken.google.com/my-firebase-project" options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = "my-firebase-project" ValidateAudience = true, ValidAudience = "my-firebase-project" ValidateLifetime = true }; } 我可以有多个发行人和受众,但不能设置多个授权机构。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.