标签: authentication

OpenID身份验证如何工作?

我有点好奇了解OpenID身份验证的工作原理.

OpenID身份验证与站点专门为自己使用的身份验证之间有什么区别吗?

openid authentication

97
推荐指数
3
解决办法
4万
查看次数

SAML与OAuth的联合登录

SAML与OAuth联合登录有什么区别?如果公司想要使用第三方Web应用程序,并且还希望单点登录并成为身份验证机构,那么哪种解决方案更有意义?

authentication oauth saml

96
推荐指数
3
解决办法
6万
查看次数

如何重定向到ASP.NET MVC中的动态登录URL

我正在创建一个多租户网站,为客户端托管页面.URL的第一部分将是一个字符串,用于标识客户端,使用以下URL路由方案在Global.asax中定义:

"{client}/{controller}/{action}/{id}"
Run Code Online (Sandbox Code Playgroud)

这样工作正常,使用/ foo/Home/Index等URL.

但是,当使用[Authorize]属性时,我想重定向到也使用相同映射方案的登录页面.因此,如果客户端是foo,则登录页面将是/ foo/Account/Login,而不是web.config中定义的固定/帐户/登录重定向.

MVC使用HttpUnauthorizedResult返回401未授权状态,我认为这会导致ASP.NET重定向到web.config中定义的页面.

那么有谁知道如何覆盖ASP.NET登录重定向行为?或者通过创建自定义授权属性来重定向MVC会更好吗?

编辑 - 答:在深入研究.Net源代码后,我认为自定义身份验证属性是最佳解决方案:

public class ClientAuthorizeAttribute: AuthorizeAttribute
{
    public override void OnAuthorization( AuthorizationContext filterContext )
    {
        base.OnAuthorization( filterContext );

        if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult )
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary
                {
                    { "client", filterContext.RouteData.Values[ "client" ] },
                    { "controller", "Account" },
                    { "action", "Login" },
                    { "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
                });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net authentication asp.net-mvc forms-authentication asp.net-routing

95
推荐指数
2
解决办法
4万
查看次数

登录 slack-desktop 无法在 4.23.0 64 位 (Ubuntu) 上运行

在应用程序中,转到“文件”>“工作区”>“登录新工作区”会启动一个浏览器窗口。在浏览器中选择工作区后,它会启动一个返回到 slack 的深层链接,但它不起作用。Slack 桌面上没有任何反应。

当检查链接过程中运行的命令时,KDE 似乎正在修改链接。我该怎么做才能解决这个问题?

linux authentication slack kde-plasma

95
推荐指数
6
解决办法
3万
查看次数

使用passport.js在node.js中进行身份验证后重定向到上一页

我正在尝试使用node.js,express和passport.js建立登录机制.登录本身工作得非常好,会话与redis很好地存储,但是在提示进行身份验证之前,我确实遇到了将用户重定向到他开始的地方的麻烦.

例如,用户跟随链接http://localhost:3000/hidden然后被重定向到http://localhost:3000/login但我希望他再次被重定向回http://localhost:3000/hidden.

这样做的目的是,如果用户随机访问他需要首先登录的页面,他将被重定向到提供其凭据的/ login站点,然后被重定向回他之前尝试访问的站点.

这是我的登录帖子

app.post('/login', function (req, res, next) {
    passport.authenticate('local', function (err, user, info) {
        if (err) {
            return next(err)
        } else if (!user) { 
            console.log('message: ' + info.message);
            return res.redirect('/login') 
        } else {
            req.logIn(user, function (err) {
                if (err) {
                    return next(err);
                }
                return next(); // <-? Is this line right?
            });
        }
    })(req, res, next);
});
Run Code Online (Sandbox Code Playgroud)

在这里我的ensureAuthenticated方法

function ensureAuthenticated (req, res, next) {
  if (req.isAuthenticated()) { 
      return next();
  }
  res.redirect('/login'); …
Run Code Online (Sandbox Code Playgroud)

authentication redirect node.js express passport.js

92
推荐指数
5
解决办法
7万
查看次数

跨子域的PHP会话

我想设置以下内容:

auth.example.com
sub1.example.com
sub2.example.com
Run Code Online (Sandbox Code Playgroud)

如果用户访问sub1.domain.com或sub2.domain.com且他们未登录,则会将其推送到auth.domain.com并登录.sub1.domain.com和sub2.domain.com是两个单独的应用程序但使用相同的凭据.

我尝试在php.ini中设置以下内容:

session.cookie_domain = ".example.com"
Run Code Online (Sandbox Code Playgroud)

但它似乎没有将信息从一个域传递到另一个域.

[编辑]

我尝试了以下方法:

sub1.domain.com/test.php

session_set_cookie_params(0, '/', '.example.com');
session_start();
print session_id() . "<br>";
$_SESSION['Regsitered'] = 1;
echo '<a href="http://auth.example.com/test.php">Change Sites</a>'
Run Code Online (Sandbox Code Playgroud)

auth.domain.com/test.php

session_set_cookie_params(0, '/', '.example.com');
session_start();
print session_id() . "<br>";
$_SESSION['Checked'] = 1;
print_r($_SESSION);
Run Code Online (Sandbox Code Playgroud)

会话ID完全相同但是当我转出$ _SESSION变量时,它不显示两个键,只是我在每个域下设置的任何键.

[编辑2]

我更新了[编辑]

php authentication session cross-domain

89
推荐指数
3
解决办法
8万
查看次数

我在哪里可以找到OpenID提供商URL列表?

我在我的网站上实现了OpenID,但我很难找到OpenID提供者URL列表.我觉得这很容易找到,但是我已经在网上搜索过,只发现了一小撮,大多是偶然的.

是否有资源列出可用的提供商及其身份验证URL?

编辑:这是我到目前为止找到的.我没有尝试过所有这些,所以如果有任何错误,请告诉我.

StackExchange https://openid.stackexchange.com

Google https://www.google.com/accounts/o8/id - 2014年5月已弃用 - 2015年4月关闭

雅虎 https://me.yahoo.com

Flickr http://www.flickr.com/username

AOL http://openid.aol.com/username

Blogspot https://www.blogspot.com/

LiveJournal http://username.livejournal.com/

Wordpress https://username.wordpress.com/

VerisignLabs https://pip.verisignlabs.com/ - 2016年9月关闭

MyOpenID https://www.myopenid.com/ - 计划于2014年2月关闭

MyVidoop https://myvidoop.com/

Technorati https://technorati.com/people/technorati/username/

PayPal https://www.x.com/developers/paypal/documentation-tools/quick-start-guides/standard-openid-integration-paypal-access

openid authentication dotnetopenauth

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

用于密码哈希的非随机盐

更新:我最近从这个问题中了解到,在下面的整个讨论中,我(我确信其他人也这样做)有点令人困惑:我一直称之为彩虹表,实际上称为哈希表.彩虹桌是更复杂的生物,实际上是Hellman Hash Chains的变种.虽然我认为答案仍然是相同的(因为它不归结为密码分析),但有些讨论可能有点偏差.
问题是:" 什么是彩虹表,它们是如何使用的? "


通常,我总是建议使用加密强随机值作为salt,与哈希函数(例如密码)一起使用,例如防止彩虹表攻击.

但实际上盐是随机的加密必需吗?在这方面,任何唯一值(每个用户唯一,例如userId)是否足够?实际上,它会阻止使用单个Rainbow Table来破解系统中的所有(或大多数)密码......
但是缺少熵真的会削弱散列函数的加密强度吗?


注意,我不是在问为什么要使用salt,如何保护它(它不需要),使用单个常量哈希(不要),或者使用什么样的哈希函数.
无论盐是否需要熵.


感谢所有答案到目前为止,但我想集中讨论我(有点)不太熟悉的领域.主要是对密码分析的影响 - 如果有人从密码数学PoV获得一些输入,我会非常感激.
此外,如果还有其他未被考虑的向量,那也是很好的输入(参见@Dave Sherohman指向多个系统).
除此之外,如果您有任何理论,想法或最佳实践 - 请使用证据,攻击情景或经验证据来支持这一点.或者甚至是可接受的权衡的有效考虑因素......我对该主题的最佳实践(资本B资本P)很熟悉,我想证明这实际上提供了什么价值.


编辑:这里有一些非常好的答案,但我认为正如@Dave所说,它归结为Rainbow Tables的常见用户名......以及可能不太常见的名称.但是,如果我的用户名是全局唯一的呢?不一定是我的系统唯一,但每个用户 - 例如电子邮件地址.
没有动力为单个用户构建RT(正如@Dave强调的那样,盐不会保密),这仍然会阻止群集.唯一的问题是我可能在不同的网站上有相同的电子邮件和密码 - 但盐无论如何都不会阻止它.
因此,它回归到密码分析 - 是否需要熵?(我目前的想法是从密码分析的角度来看没有必要,但这是出于其他实际原因.)

security authentication hash cryptography password-protection

88
推荐指数
4
解决办法
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 password.' });
      }
      return done(null, user);
    });
  }
));
Run Code Online (Sandbox Code Playgroud)

调用done()时是否可以返回令牌?像这样......(只是伪代码)

if(User.validCredentials(username, password)) {
  var token = jwt.encode({username: username}, tokenSecret);
  done(null, {token : token}); //is this possible? …
Run Code Online (Sandbox Code Playgroud)

authentication token node.js jwt passport.js

87
推荐指数
2
解决办法
4万
查看次数

JWT刷新令牌流

我正在构建一个移动应用程序,并使用JWT进行身份验证.

看起来最好的方法是将JWT访问令牌与刷新令牌配对,这样我就可以根据需要随时使访问令牌过期.

  1. 刷新令牌是什么样的?它是随机字符串吗?这个字符串加密了吗?这是另一个JWT吗?
  2. 刷新令牌将存储在用户模型的数据库中以供访问,对吗?看起来它应该在这种情况下加密
  3. 我会在用户登录后发回刷新令牌,然后让客户端访问一个单独的路径来检索访问令牌吗?

security authentication oauth-2.0 jwt

87
推荐指数
5
解决办法
6万
查看次数