标签: authentication

验证后,Passport.js + Express.js将用户转发到原始目的地

我有一个应用程序是服务器上的Node + Express + Passport和客户端上的jQuery + Backbone.js.客户端在URL中使用哈希标记,但是对于某些功能,用户登录是很重要的.

我希望可以通过URL访问该应用,例如http://mydomain.com/app#cone/waffle/flavor/mint/toppings/sprinkles:

  • 如果用户已经登录,他们会直接转到请求的URL而不会有麻烦
  • 如果用户尚未登录,/login则会转到然后转到请求的URL

继这篇SO帖子,关于Node.js Passport的Google策略的自定义returnUrl之后 ,我就这样了

  • 如果他们已经登录,他们会直接使用URL,哈希标签等
  • 如果他们没有被记录,则会将他们带到登录页面,然后到达请求的网址,但是......

它似乎在登录后从重定向上的原始URL中删除哈希参数.

有什么方法可以在将哈希参数重定向到原始目标时保留哈希参数吗?

从这篇文章中,从请求URL获取哈希参数我得到了哈希标签在服务器上不可用的想法,这是使用哈希标签的全部要点.

所以我怀疑这是不可能的.也许以某种方式在本地缓存params并在重定向上检索它们,对[original URL minus hastags] + #use-cached-params吗?

authentication node.js express passport.js

10
推荐指数
1
解决办法
2324
查看次数

使用Google身份验证和Google Oauth 2.0登录单页应用程序

我们正在开发SPA - 完整的客户端基础javascript应用程序,需要对用户进行身份验证才能访问内部.

正如我从搜索中发现的那样,我们可以将我们的身份验证机制外包并使用Google帐户.我从这个网站上了解到 https://developers.google.com/accounts/docs/OAuth2Login - 如何处理Google API和身份验证机制.

简而言之,我们需要:

  • 使用params向google url发送请求,要求用户允许SPA使用他们的个人数据
  • 如果成功,我们会从Google获得令牌
  • 我们可以使用此令牌来访问我们被要求并使用它的API.

这个描述得很好,我理解它并有一些JS代码来实现它.

我不明白.

我有一个应用程序与它的私人数据.我想使用用户的电子邮件作为登录或用户ID(无论如何调用它)来访问应用程序的内部,例如用户创建的任务,用户的配置文件等.因此,在我的SPA中显示用户创建的任务我需要用户的电子邮件查询数据库.

我想象下一个场景:

  • 用户点击Login with Google按钮
  • 我们获得一个令牌 - 这意味着用户已成功通过身份验证
  • 我们坚持用户和他的电子邮件与SPA合作
  • 当用户点击Logout我们清除所有访问数据

我应该在哪里坚持这些数据?

如果Forms Authentication我理解我们将登录/密码传递给服务器,如果它们与数据库匹配,我们创建Forms Ticket并将其存储在cookie中.

谷歌的身份验证是否有类似的案例?如果我将用户的电子邮件存储在cookie中,我认为出于安全原因这不是很好.如果我要保存令牌 - 我不确定为什么需要它以及如何在我的SPA中使用它,我在身份验证后没有使用任何Google API.

您是否有任何示例案例我们如何在类似案例中构建我们的流程?

谢谢.

authentication oauth-2.0 single-page-application google-oauth

10
推荐指数
1
解决办法
4075
查看次数

WebApi ActionFilterAttribute,HttpActionContext访问用户名(IPrincipal)

我需要在我的动作过滤器中访问当前登录的用户.身份由DelegatingHandler进一步的执行链设置.

可以访问当前IPrincipal使用HttpContext.Current.User. 到目前为止,我避免使用HttpContext.Current,因为在我看来是坏风格.首先,你的代码只有在IIS中托管时才能工作,其次它包含一个System.Web我认为不会受到伤害的引用,但System.Net.Http如果可能的话,我更愿意坚持使用. 依靠好的旧" HttpContext" 感觉不对.

有没有其他方法可以访问用户的身份ActionFilter?或者,HttpContext如果您不打算运行自托管应用程序,是否可以使用?

authentication iprincipal actionfilterattribute asp.net-web-api

10
推荐指数
1
解决办法
8354
查看次数

通过Java API从远程主机进行HDFS访问,用户身份验证

我需要通过Java API从远程桌面使用HDFS集群.一切正常,直到写访问.如果我正在尝试创建任何文件,我会收到访问权限异常.路径看起来很好,但异常表示我的远程桌面用户名,这当然不是我需要访问所需的HDFS目录.

问题是: - 有没有办法在Java API中使用"简单"身份验证来表示不同的用户名? - 您能否在Java API示例中更好地解释hadoop/HDFS中的身份验证/授权方案?

是的,我已经知道'whoami'在这种情况下可能会使用shell别名超载但我宁愿避免像这样的解决方案.此处的具体细节是我不喜欢通过SSH和脚本使用管道等一些技巧.我想使用Java API执行所有操作.先感谢您.

java security authentication hadoop hdfs

10
推荐指数
1
解决办法
3万
查看次数

来自Java的HDFS - 指定用户

我很高兴连接到HDFS并列出我的主目录:

Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://hadoop:8020");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
RemoteIterator<LocatedFileStatus> ri = fs.listFiles(fs.getHomeDirectory(), false);
while (ri.hasNext()) {
    LocatedFileStatus lfs = ri.next();
    log.debug(lfs.getPath().toString());
}
fs.close();
Run Code Online (Sandbox Code Playgroud)

我现在想要做的是以特定用户身份连接(而不是whois用户).有谁知道你如何指定你连接的用户?

java security authentication hadoop hdfs

10
推荐指数
1
解决办法
2万
查看次数

Symfony2:自动从Windows会话登录用户

Symfony2我建立了一个内联网.它目前使用FOSUserBundleLDAP bundle来记录用户,我想添加从Windows会话中登录用户的功能.

我找到 PHP 的NTLM脚本及其更新版本,但我无法将它们合并到Symfony2中.

我还发现了一个用于Symfony2的NTLM软件包,但它是为旧版本的Symfony编写的,并且不再维护.我无法重写它并让它工作.

我的问题是; 除了已经存在的LDAP功能之外,我怎样才能在Symfony2-app中自动从他们的Windows会话登录用户?什么是最好最简单的方法?

windows authentication ntlm login symfony

10
推荐指数
1
解决办法
1465
查看次数

REST身份验证和HMAC /私钥(何时设置?)

在过去的几天里,我一直在用一个简单的应用程序想法,因为我正在尝试自学REST基础知识.

到目前为止,我已经认识到,实现这一目标的最佳方式是使用亚马逊使用的HMAC.

我最关心的是我究竟如何对用户进行身份验证为他们提供私钥,以便他们可以开始签署HMAC?我一直读取用于签名的HMAC私钥不应该通过线路发送,但后来如何,他们曾经把它摆在首位?

我的想法是这样的,但我不确定这是否有效.

用户数据库表:

users (simplified, this would probably be a private key per client app?)
  id (their public key?)
  username
  password?
  privatekey
Run Code Online (Sandbox Code Playgroud)

假设一个HTML/JS客户端将向用户呈现一个传统的登录页面,该页面向API发送POST,如下所示:

https://example.com/myapp/api/v1/authenticate.json
POST: username / password
Run Code Online (Sandbox Code Playgroud)

那也会回来

404:User not found
200:{ "id" : <id>, "privatekey": <privatekey> }
Run Code Online (Sandbox Code Playgroud)

客户端然后将该密钥存储在某个地方(本地存储/ cookie是安全的地方吗?)并使用它来签署看起来像这样的其他请求

GET https://example.com/myapp/api/v1/something/?key1=value1&publickey={theirID}&hmac={hmac signature of the request using their private key}
Run Code Online (Sandbox Code Playgroud)

然后,服务器将检查公钥,检索关联的私钥并重建HMAC签名,如果它们匹配,则我们有经过身份验证的请求处理它.

我说得对吗?如果我仍然需要像我的例子中那样的密码,我不确定我是否理解私钥的作用,所以有些东西告诉我,我可能错了.

authentication rest web-services restful-authentication

10
推荐指数
1
解决办法
7186
查看次数

Spring Security:来自UserDetailsS​​ervice的自定义异常消息

我能够显示SPRING_SECURITY_LAST_EXCEPTION.message("坏凭证"),当用户尝试使用不正确的凭据或用户登录是由于某种原因被禁用.

我想为用户被禁用的情况显示自定义消息,而不是显示"Bad Credentials",而是说"你已被禁用......等等,等等......".我怎么做?

我正在使用UserDetailsS​​ervice在spring security中提供用户名/密码.

authentication spring spring-security

10
推荐指数
1
解决办法
1万
查看次数

中央与分布式身份验证和授权

我对OAuth相关主题有一些困惑,我希望有人可以帮助我清理它们:)在任何我不合适的地方随意纠正我.

所以,假设我的网络公司在不同的域上运行了许多网站:

  • www.socks.com
  • www.boats.com
  • www.cakes.com

假设这些是带有一些社交性的电子商务网站,因此存在具有各种存储数据点的用户帐户.所以我的公司(我们称之为ACME电子商务)已经为不同的客户创建并管理所有这些网站.

现在,我们决定为所有电子商务网站建立一个中央帐户是很方便的; 其好处包括通过允许客户使用现有帐户登录任何站点来减少摩擦,以及集中信息以提高营销准确性并减少与客户的过多沟通.输入OAuth!

据我所知,OAuth是一种身份验证授权标准.身份验证是"登录",授权是"你可以进行这些API调用",简而言之,对吗?让我们从身份验证开始:

认证!

这里的想法是你去socks.com,当你通常登录时,有一个"使用ACME ID登录"按钮,以及"登录到Socks.com".你到处都可以看到:登录Facebook,登录谷歌等等.所以我们有"使用ACME ID登录".

当用户点击"使用ACME ID登录"时,socks.com直接从ACME的OAuth服务器请求并接收未经授权的请求令牌,然后将用户的浏览器重定向到ACME的OAuth站点.在那里,用户插入其ACME ID帐户的用户名和密码,ACME OAuth授权请求令牌并通过重定向URL将其返回到socks.com.

所以在这一点上,Socks.com知道用户登录了ACME ID.如果Socks.com想要查询来自ACME资源API的信息,它会将其授权请求令牌交换为访问令牌然后进行调用,但我们只是在谈论身份验证,并且用户已经过身份验证.对?

假设我有这个权利,即使我有点错误,Socks.com在这一点上做了什么?因为在这种情况下,它有自己的用户数据库,它是否将中央OAuth身份验证与其自己的数据库同步?Socks.com现在知道joe@blow.com已经登录,它会在数据库中查询该电子邮件地址,以获取他的购买历史记录和最后购物车内容?它为joe维护一个会话,如果该会话到期,那么他必须再次使用他的ACME ID进行身份验证?

我知道Spotify会做这样的事情; 他们"登录Facebook".如果我选择此选项,则会在Facebook域上弹出一个带有登录窗口的小浏览器窗口.我登录,弹出窗口关闭,Spotify显示我已登录...我的Facebook电子邮件地址,以及一个由8个左右的随机数组成的帐户名.这似乎是Spotify看到我通过Facebook的OAuth服务器进行身份验证,然后在他们自己的系统中为我生成一个新帐户.随后的Facebook-OAuth身份验证/登录会让我每次都进入同一个Spotify帐户.

什么,如果有的话,我在这里有错吗?

因此,通过使用ACME ID的中央身份验证设置,我们可以允许用户使用相同的ID登录socks.com,boats.com和cakes.com,我们将在每个位置礼貌地为他们创建帐户.这是减少摩擦力的行动,但地址和信用卡数据仍然是分开存储的,因此我们没有获得集中化的好处.但是,这超出了身份验证,我们正在授权!

授权!

因此,我们进行了一些帐户数据重组,并将所有客户的地址和信用卡数据移动到其中央ACME ID帐户中.我们建立了一个API来请求和修改此信息.现在,当cakes.com使用ACME ID进行身份验证并获取其授权请求令牌时,该令牌将交换到ACME OAuth服务器以获取API的访问令牌.(这是存储在服务器端,存储在用户的会话数据中.)

现在,当用户进入结帐的cakes.com,我们可以进行API调用ACME资源服务器,传递ACME ID的用户名,来获取客户的地址的数组,然后用它来填充网页.嘿,这是很好的服务!Cakes.com 由OAuth程序授权执行此类操作.

我有一切吗?

边缘案例!

上面带有中央OAuth服务器的电子商务网站的实现非常明确,但是有些"边缘情况"可能会以不同的方式实现:

1)没有分布式用户帐户

如果我想强制socks.com,boats.com和cakes.com的所有用户仅使用ACME ID登录,该怎么办?也许在每个站点都有一个"用户帐户",包括购买数据和地址数据等,带有相关的用户名,但没有密码,也没有实际的登录机制.一旦ACME ID被验证,会话就被标记为"登录".

或者,也许所有信息(如购买历史记录,地址和CC#)都会汇总到ACME资源端点中,而不会在卫星电子商务网站上存储有关客户的信息?那么,卫星基本上是奴隶,使用ACME OAuth作为远程数据库.然后,由于购买历史是集中的,您或多或少需要集中您的项目,然后它可能会归结为"什么不集中?" 和"为什么有单独的网站" - 除了他们需要分开.

那么,这有什么好处吗?

2)用于移动应用程序的UI-Less Web API

假设您正在构建iOS/Android等.应用程序称为Horses,您需要在云端存储有关您的用户的一些信息,特别是他们真正喜欢的马匹.尽管有人认为任何人都可能因为马匹与袜子,船只和蛋糕无关,但您希望允许您的用户使用他们的ACME ID以及您发明的马匹ID进行登录.

现在,您基本上采取了在www.horses.com域上拥有卫星用户帐户系统的路线,并可选择允许此人使用ACME ID登录并慷慨地创建一个horses.com帐户,以便他们存储他们的horses.com相关数据.很标准; 一个区别是你实际上并不需要建立一个网站,它只是一个API.

但是,如果您只想允许ACME ID作为登录,没有horses.com帐户,该怎么办?因此,当您进入登录状态时,您的horses.com API将启动与ACME OAuth的OAuth舞蹈,进行身份验证,然后向应用程序提供访问令牌(针对horses.com).该访问令牌将用于根据用户在应用中喜欢的马匹向horses.com发出读写API调用.我在这里是正确的吗?

3)访问多个站点的Central Auth

我们采取这种设置:ACME ID包含用户名,密码,电子邮件,信用卡和账单信息.Socks.com,boats.com和cakes.com有购买历史记录,以及关于这些人在这些网站上做过的与袜子相关,船相关或蛋糕相关(分别)的事情的社交信息.

现在我们想要创建一个使用ACME ID进行身份验证的移动应用程序,并且可以从ACME ID的Resource API(用于CC和计费数据)以及使用ACME ID进行身份验证的每个站点提取信息.通过这种方式,我们可以很好地融合袜子,船只和蛋糕,然后我们可以为客户收取费用!(你明白了.)

那么......怎么可能呢?

  • 从ACME OAuth服务器接收适用于卫星网站API的访问令牌?
  • 在每个卫星站点单独进行身份验证,使应用程序只能获取与船只和蛋糕相关的内容,因为用户不想在线拍摄他的袜子的照片?
  • 还有其他方法吗?

谢谢阅读!

authentication api oauth user-accounts web

10
推荐指数
1
解决办法
2268
查看次数

由于"身份验证协议被拒绝",MySQL ODBC链接失败

我有一个很好的搜索,但还没有找到一个答案,可以让我纠正这个问题.

我正在尝试从MS Access连接到远程服务器上的MySQL 5.2数据库.

我已经设置了一个用户帐户,该帐户在相关表格上具有选择,插入,更新,删除权限.但是,当我尝试连接此帐户时,我得到:

连接失败[HY000] [MySQL] [ODBC 5.2(w)驱动程序]使用旧(4.1.1之前)身份验证协议拒绝连接(启用客户端选项'secure_auth')

当我尝试使用root帐户访问时,连接正常工作,这让我想知道为什么它会返回一个身份验证协议错误,因为正在使用相同的驱动程序 - 所有改变的是使用的帐户 - 所以肯定是通过密码传递密码相同的认证协议?为什么一个用户名/密码组合会返回协议错误而不是另一个?

看来这个错误很常见,但我还没有找到一个明确的解决方案.你能帮我吗?

mysql authentication ms-access odbc

10
推荐指数
1
解决办法
2万
查看次数