Questions tagged «authentication»

身份验证是验证身份的过程。

4
password.session()中间件有什么作用?
我正在使用Passport.js使用“ 简易节点身份验证:设置和本地”教程构建身份验证系统。 我对做什么感到困惑passport.session()。 在使用了不同的中间件之后,我逐渐了解到这express.session()是通过cookie向客户端发送会话ID的原因,但是passport.session()除了之外,我对做什么以及为什么需要它感到困惑express.session()。 这是我设置应用程序的方式: // Server.js配置应用程序并设置Web服务器 //importing our modules var express = require('express'); var app = express(); var port = process.env.PORT || 8080; var mongoose = require('mongoose'); var passport = require('passport'); var flash = require('connect-flash'); var configDB = require('./config/database.js'); //Configuration of Databse and App mongoose.connect(configDB.url); //connect to our database …

7
Socket.IO身份验证
我试图在Node.js中使用Socket.IO,并试图允许服务器为每个Socket.IO客户端赋予一个身份。由于套接字代码不在http服务器代码的范围内,因此无法轻松访问已发送的请求信息,因此我假设在连接过程中需要将其发送出去。什么是最好的方法 1)将有关谁通过Socket.IO连接到服务器的信息 2)验证他们说的是谁(如果正在使事情变得更容易,我目前正在使用Express)

3
ASP.NET Web API身份验证
我希望在使用ASP.NET Web API时从客户端应用程序对用户进行身份验证。我已经观看了网站上的所有视频,还阅读了该论坛帖子。 [Authorize]正确放置属性将返回401 Unauthorized状态。但是,我需要知道如何允许用户登录到API。 我想从Android应用程序向API提供用户凭据,让用户登录,然后对所有后续API调用进行预身份验证。

3
REST API基于令牌的身份验证
我正在开发需要身份验证的REST API。因为身份验证本身是通过HTTP上的外部Web服务进行的,所以我认为我们将分配令牌以避免重复调用身份验证服务。巧妙地使我想到了第一个问题: 这真的比仅要求客户端在每个请求上使用HTTP Basic Auth并在身份验证服务服务器端缓存调用更好吗? Basic Auth解决方案的优点是,在可以开始对内容的请求之前,不需要完全往返服务器。令牌的范围可能会更灵活(即仅授予特定资源或操作的权限),但这似乎比我更简单的用例更适合OAuth上下文。 目前,令牌的获取方式如下: curl -X POST localhost/token --data "api_key=81169d80... &verifier=2f5ae51a... &timestamp=1234567 &user=foo &pass=bar" 的api_key,timestamp并且verifier被所有请求所需。“验证程序”由以下方式返回: sha1(timestamp + api_key + shared_secret) 我的意图是仅允许来自已知方的呼叫,并防止逐字重复使用呼叫。 这样够好吗?杀人 过度杀伤力? 有了令牌,客户可以获取资源: curl localhost/posts?api_key=81169d80... &verifier=81169d80... &token=9fUyas64... &timestamp=1234567 对于最简单的呼叫,这似乎太冗长了。考虑到shared_secret将遗留在(至少)iOS应用程序中的意愿(我认为可以从中提取它),这是否提供了错误的安全感之外的任何东西?

7
反伪造令牌发行(MVC 5)
我在使用防伪令牌时遇到了问题:(我创建了自己的User类,该类工作正常,但是现在每当进入/ Account / Register页面时,都会出现错误。错误是: 类型为“ http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier ”或“ http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider ”的声明为在提供的ClaimsIdentity上不存在。要通过基于声明的身份验证启用防伪令牌支持,请验证配置的声明提供程序是否在其生成的ClaimsIdentity实例上同时提供了这两个声明。如果配置的声明提供程序改为使用其他声明类型作为唯一标识符,则可以通过设置静态属性AntiForgeryConfig.UniqueClaimTypeIdentifier对其进行配置。 我发现这篇文章: http://stack247.wordpress.com/2013/02/22/antiforgerytoken-a-claim-of-type-nameidentifier-or-identityprovider-was-not-present-on-provided-claimsidentity/ 所以我将Application_Start方法更改为: protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Email; } 但是当我这样做的时候,我得到了这个错误: 提供的ClaimsIdentity上没有类型为http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress的声明。 有人遇到过吗?如果是这样,您知道如何解决吗? 提前 加油,r3plica 更新1 这是我的自定义用户类: public class Profile : User, IProfile { public Profile() : base() { this.LastLoginDate = DateTime.UtcNow; this.DateCreated = DateTime.UtcNow; } …

12
MVC 5访问声明身份用户数据
我正在使用Entity Framework 5 Database First方法开发MVC 5 Web应用程序。我正在使用OWIN进行用户身份验证。下面显示了我的帐户控制器中的登录方法。 public ActionResult Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { var user = _AccountService.VerifyPassword(model.UserName, model.Password, false); if (user != null) { var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, model.UserName), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role); identity.AddClaim(new Claim(ClaimTypes.Role, "guest")); identity.AddClaim(new Claim(ClaimTypes.GivenName, "A Person")); identity.AddClaim(new Claim(ClaimTypes.Sid, …

7
流行的应用程序如何验证用户请求从他们的移动应用程序到服务器?
假设我有一个连接到.Net API的Android应用程序,用于接收/设置数据。我的困惑在于,如何在用户每次向API提出请求时首次注册/登录并对其进行身份验证。 如果我仅使用基于用户名/密码的身份验证,它们将不够安全吗? 当然,出于安全原因,我无法将该用户名/密码保存在设备中? 我是否应该在注册时为每个用户发布一个GUID,将其保存在他们的设备中,并在API请求期间每次进行检索? 还有哪些其他可用模式,哪些是最有效和最安全的,我只需要一个流程即可。有人可以告诉我著名的android应用程序(例如Facebook,FourSquare或Twitter)使用什么方法来验证从移动应用程序到服务器的每个请求吗? 抱歉,如果这不是一些公共信息。

9
RESTful Web服务-如何验证来自其他服务的请求?
我正在设计一个RESTful Web服务,该服务需要用户以及其他Web服务和应用程序访问。所有传入的请求都需要进行身份验证。所有通信均通过HTTPS进行。用户身份验证将基于身份验证令牌进行工作,该身份验证令牌是通过将用户名和密码(通过SSL连接)发布到服务提供的/ session资源中而获得的。 对于Web服务客户端,客户端服务后面没有最终用户。这些请求是由计划任务,事件或某些其他计算机操作启动的。连接服务的列表是事先已知的(显然,我想)。我应该如何验证来自其他(网络)服务的这些请求?我希望对这些服务的身份验证过程尽可能地容易实现,但是不以安全为代价。对于这种情况,标准和最佳做法是什么? 我能想到的(或已向我建议的)选项: 让客户端服务诉诸于“假”用户名和密码,并以与用户相同的方式对它们进行身份验证。我不喜欢此选项-感觉不正确。 为客户端服务分配一个永久的应用程序ID,也可以分配一个应用程序密钥。据我了解,这与使用用户名+密码相同。使用此ID和密钥,我可以对每个请求进行身份验证,也可以创建身份验证令牌来对其他请求进行身份验证。无论哪种方式,我都不喜欢此选项,因为任何可以保留应用程序ID和密钥的人都可以模拟客户端。 我可以在以前的选项中添加IP地址检查。这将使执行虚假请求变得更加困难。 客户证书。设置我自己的证书颁发机构,创建根证书,并为客户端服务创建客户端证书。不过,我想到了两个问题:a)我如何仍允许用户在没有证书的情况下进行身份验证,以及b)从客户端服务的角度来看,实现此方案有多复杂? 还有什么-那里必须有其他解决方案吗? 我的服务将在Java上运行,但是我故意遗漏了将在其上构建哪种特定框架的信息,因为我对基本原理更感兴趣,而对实现细节却不太感兴趣-我认为这是最好的解决方案无论底层框架如何,都可以实现。但是,我对这个主题没有多少经验,因此,有关实际实现的具体技巧和示例(例如有用的第三方库,文章等)也将不胜感激。

8
iPhone应用程序的Facebook访问令牌服务器端验证
我正在开发基于与服务器通信的iPhone应用程序,并且我想使用Facebook身份验证机制。 基本上,我认为它应该像这样工作: 在我的iPhone应用程序中,用户使用他的电子邮件和密码登录到Facebook。 用户允许访问他的有关Facebook应用程序的数据。 成功登录后,我的iPhone应用程序会收到访问令牌。 为了与服务器进行进一步通信,我的iPhone应用程序应使用接收到的Facebook访问令牌(例如:在查询中)。 当我的服务器从iPhone应用程序收到带有访问令牌的查询时,它应询问Facebook该令牌有效(以及对谁有效),如果是,则服务器应假定用户已通过Facebook进行身份验证。 我的问题是:服务器应如何询问Facebook给定的访问令牌是否有效?我认为我应该以某种方式检查令牌是否对我的Facebook应用程序有效。 我已经尝试了许多Facebook查询来绘制API图,但我发现没有任何效果。能给我一些例子吗?

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签名验证是验证令牌的唯一方法,这意味着服务器密钥的完整性是切入点,那么应该如何管理服务器密钥?从环境变量读取并为每个部署的堆栈创建一次(随机化?)?定期更新或轮换(如果这样,如何处理在轮换之前创建但在轮换之后需要验证的现有有效令牌,如果服务器在任何给定时间保留当前和先前的机密就足够了) ?还有吗 当涉及到服务器机密受到威胁的风险时,我可能只是过于偏执,这当然是一个更普遍的问题,需要在所有加密情况下解决……

4
跨多个域的单点登录[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我们公司拥有多个域,每个域上都托管有一个网站。目前,每个域都有自己的身份验证,该身份验证通过Cookie进行。 当登录到一个域的某人需要访问另一个域的任何内容时,用户需要使用位于另一域的另一个网站上的不同凭据再次登录。 我当时正在考虑朝单一登录(SSO)迈进,以便消除这种麻烦。我不知道如何实现此目标的任何想法,因为我在这方面没有任何经验。 谢谢。 编辑: 网站是Internet(外部)和Intranet(公司内部使用)站点的组合。


4
“刷新令牌”的目的是什么?
我有一个与YouTube Live Streaming API集成的程序。它运行在计时器上,因此我编程起来相对容易,每隔50分钟使用刷新令牌来获取一个新的访问令牌。我的问题是,为什么? 当我通过YouTube认证时,它给了我一个刷新令牌。然后,我使用此刷新令牌大约每小时获取一次新的访问令牌。如果我有刷新令牌,因为它永不过期,所以我总是可以使用它来获取新的访问令牌。因此,除了从一开始就给我访问令牌并且不打扰整个“刷新令牌”系统,我看不出这有什么安全性。

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.