标签: auth-token

在更改密码和在node.js中注销时使JWT无效的最佳做法?

我想知道在更改密码/注销时不使用db而使JWT无效的最佳实践.

我有以下想法通过点击用户数据库处理上述2个案例.

1.密码更改,我检查存储在用户db中的密码(散列).

2.注销时,我在用户数据库中保存了最后注销时间,因此通过比较令牌创建时间和注销时间,我可以使这种情况无效.

但是这两种情况是以每次用户点击api时命中用户数据库为代价的.任何最佳实践表示赞赏.

更新: 我不认为我们能够在没有命中数据库的情况下使JWT无效.所以我想出了一个解决方案.我已经发布了我的答案,如果您有任何疑虑,欢迎您.

javascript token auth-token node.js jwt

64
推荐指数
3
解决办法
5万
查看次数

如何在django频道上使用令牌认证对websocket进行身份验证?

我们想为我们的websockets使用django-channels,但我们也需要进行身份验证.我们有一个运行django-rest-framework的rest api,我们使用令牌来验证用户,但是django-channels似乎没有内置相同的功能.

auth-token django-rest-framework django-channels

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

如何使AccountManager(authtoken)和OpenID一起工作(没有AppEngine)?

我正在制作一个Android应用程序,它应该能够从Web服务(不是GAE的一部分)获取数据.用户可以使用OpenId通过浏览器登录Web服务(仅允许使用Google帐户).

AccountManager可以给我authtoken.我可以将此authtoken与用户的谷歌帐户名(电子邮件)一起保存在我的服务器上,然后使用此帐户名将他的openid登录与应用程序注册相关联.

但这并没有解决任何问题,因为我无法根据用户的OpenID信息验证此令牌......或者我呢?我以为我可以使用用户的authtoken"以某种方式"将他的Android帐户链接到网络帐户.

这看起来越来越像是一种错误的处理方式,但我不想在SharedPreferences中保存用户Google的用户名/密码,并使用这些数据进行登录.

有创意吗?谢谢

openid webserver android auth-token accountmanager

15
推荐指数
1
解决办法
2580
查看次数

如何安全地让我的用户使用刷新令牌登录?

来自/sf/answers/504648441/:

刷新令牌的想法是,如果访问令牌被泄露,因为它是短暂的,攻击者有一个有限的窗口滥用它.

我明白了,但是如果攻击者访问刷新令牌,他们将能够获得一个新的身份验证令牌,我错了吗?这似乎只是推迟了长期存在的令牌安全漏洞......

关于这一点,你会在同一个答案中找到:

刷新令牌(如果受到攻击)是无用的,因为除了刷新令牌之外,攻击者还需要客户端ID和机密才能获得访问令牌.

那么使用刷新令牌和简单地辞职之间的区别是什么?如果您不希望用户再次重新输入,那么如何存储客户端ID和密码?


正如@FStephenQ指出的那样,刷新令牌只能使用一次:攻击者将能够获得一个新的身份验证令牌,但只能获得一次,而且只能获得一次.但是,一旦你使用了新的刷新令牌,你如何获得新的刷新令牌呢?如果你使用一个新的,那么攻击者也可以刷新他们的令牌......


实际问题是:如何让我的用户登录?在我使用的应用程序上,一旦我登录,我就不必再次登录了:他们是如何进行的?

security authentication api remember-me auth-token

12
推荐指数
1
解决办法
4084
查看次数

下载文件时如何传递身份验证令牌?

我有一个 Web 应用程序,其中 Angular (7) 前端与服务器上的 REST API 通信,并使用 OpenId Connect (OIDC) 进行身份验证。我正在使用向我的 HTTP 请求HttpInterceptor添加Authorization标头以向服务器提供身份验证令牌。到现在为止还挺好。

但是,除了传统的 JSON 数据,我的后端还负责即时生成文档。在添加身份验证之前,我可以简单地链接到这些文档,如下所示:

<a href="https://my-server.com/my-api/document?id=3">Download</a>
Run Code Online (Sandbox Code Playgroud)

但是,现在我已经添加了身份验证,这不再有效,因为浏览器在获取文档时没有在请求中包含身份验证令牌 - 所以我401-Unathorized从服务器得到了响应。

因此,我不能再依赖普通的 HTML 链接——我需要创建自己的 HTTP 请求,并显式添加身份验证令牌。但是,我如何确保用户体验与用户单击链接时的体验相同?理想情况下,我希望使用服务器建议的文件名保存文件,而不是通用文件名。

http-headers auth-token openid-connect angular

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

如何从Android上保存的帐户中检索Facebook-AuthToken

我正在尝试使用以下代码检索Facebook的AuthToken(由Facebook for Android保存).

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccountsByType("com.facebook.auth.login");
if (accounts.length > 0) {          
    for(int j = 0; j < accounts.length; j++) {
        Account account = accounts[j];
        if(account.type != null && account.type.equals("com.facebook.auth.login")) { 
            Log.e(RuntimeVars.MY_NAME, "FACEBOOK-TYPE FOUND");
            am.getAuthToken(account, "com.facebook.auth.login", null, ConversationList.this,
                new AccountManagerCallback<Bundle>() {
                    public void run(AccountManagerFuture<Bundle> arg0) {
                        try {
                            Bundle b = arg0.getResult();
                            Log.e(RuntimeVars.MY_NAME, "THIS AUTHTOKEN: " + b.getString(AccountManager.KEY_AUTHTOKEN));
                        }
                        catch (Exception e) {
                            Log.e(RuntimeVars.MY_NAME, "EXCEPTION@AUTHTOKEN");
                        }
                    }
                }, null);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

找到登录凭据并将FACEBOOK-TYPE …

android facebook auth-token accountmanager

7
推荐指数
1
解决办法
9329
查看次数

Flask登录mechanisim来验证每个令牌我的电话

嗨,我正在查看flask-login处理会话登录很好,这项工作很适合模板和视图,我有权访问会话.

不过,我一直试图知道是否有办法将user_token发送给授权的电话.我查看了文件,对此非常模糊.它说我应该

  • 在我的User对象中实现get_auth_token.
  • Decorte可以加载用户令牌库的@user_loader函数.

我虽然看到了以下内容(请纠正我,如果我错了)

  • 用于存储身份验证令牌的Cookie库有一种方法可以决定将令牌作为参数,正文或标题的一部分发送,而不必从cookie中获取它.
  • 我不太确定如何使用auth令牌验证呼叫.

authentication auth-token flask flask-login

7
推荐指数
2
解决办法
4780
查看次数

Django Rest Framework JWT

我正在使用Django Rest Framework为我的应用程序构建API,并希望实现DjangoRestFramework-JWT进行令牌认证.这些步骤看起来很简单,但是当我测试端点时,我得到500错误.终端输出是一大堆html说没有提供csrf_token.代码和错误如下.非常感谢您的帮助.

curl -X POST -d "username=admin&password=123abc" http://127.0.0.1:8000/api/token/auth/
Run Code Online (Sandbox Code Playgroud)

CSRF错误

<!DOCTYPE html>
<html lang="en">
    <head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <meta name="robots" content="NONE,NOARCHIVE">
      <title>403 Forbidden</title>
    </head>
    <body>
        <div id="summary">
            <h1>Forbidden <span>(403)</span></h1>
            <p>CSRF verification failed. Request aborted.</p>
            <p>You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties.</p>
            <p>If you have configured your browser to disable cookies, please re-enable …
Run Code Online (Sandbox Code Playgroud)

python django auth-token jwt django-rest-framework

7
推荐指数
1
解决办法
3497
查看次数

无法从不同的应用程序获取AuthToken的自定义帐户

我有两个使用相同帐户类型的应用.我希望当用户第一次打开第二个应用并且存在一个帐户时,会显示以下页面:

在此输入图像描述

但是当我运行这段代码时没有任何反应:

final AccountManagerFuture<Bundle> future = mAccountManager.getAuthToken(account, authTokenType, null, this, null, null);

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            Bundle bnd = future.getResult();

            final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN);
            showMessage((authtoken != null) ? "SUCCESS!\ntoken: " + authtoken : "FAIL");
            Log.d("udinic", "GetToken Bundle is " + bnd);
        } catch (Exception e) {
            e.printStackTrace();
            showMessage(e.getMessage());
        }
    }
}).start();
Run Code Online (Sandbox Code Playgroud)

当我从具有验证器的应用程序运行它时,上面的代码正常工作.当我在代码下面运行时,系统会生成一个通知,当我点击它时,会出现上面的图片.

final AccountManagerFuture<Bundle> future = mAccountManager
        .getAuthToken(account, authTokenType, null, true,
                null, handler);
Run Code Online (Sandbox Code Playgroud)

单击允许按钮可AuthToken正确返回.但是我希望在通话时看到授权许可页面(上图)getAuthToken,而不是点击通知.我怎样才能做到这一点?

android auth-token android-authenticator android-account

7
推荐指数
1
解决办法
738
查看次数

通过添加从另一个请求返回的身份验证令牌来修改 http 代理请求

我正在使用 http-proxy-middleware ( https://github.com/chimurai/http-proxy-middleware#http-proxy-eventsmy-proxy/ ) 来实现到另一个 REST API (调用它) 的简单代理 (调用它/rest-api)这要求用户在 HTTP 标头中传递身份验证令牌auth-tokenPOST /rest-api/auth可以使用正文中的凭据从端点获取令牌。

我希望我的代理接受传入请求并检查是否auth-token在请求标头中设置,如果没有,则在将请求传递到 之前执行POST /rest-api/auth检索令牌并在标头中设置。auth-tokenrest-api/

在我指定的代理配置中

onProxyReq: function (proxyReq, req, res) {
        if (!req.header("auth-token")) {
            const authRequest = request({
                    url: 'rest-api/auth',
                    method: 'POST',
                    json: {"username": "user", "password": "pass"}
                },
                function (error, resp, body) {
                    proxyReq.setHeader("auth-token", body.token)
                }
            );
        }
    }
Run Code Online (Sandbox Code Playgroud)

我可以看到body.token返回正确的令牌。但是,setHeader调用失败并显示Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to …

proxy request auth-token node.js http-proxy-middleware

6
推荐指数
1
解决办法
9139
查看次数