标签: jwt

NodeJs - 从JWT令牌中检索用户infor?

节点和角度.我有一个MEAN堆栈身份验证应用程序,我在成功登录时设置JWT令牌,如下所示,并将其存储在控制器的会话中.通过服务拦截器将JWT令牌分配给config.headers:

var token = jwt.sign({id: user._id}, secret.secretToken, { expiresIn: tokenManager.TOKEN_EXPIRATION_SEC });
            return res.json({token:token});
Run Code Online (Sandbox Code Playgroud)

authservice.js拦截器(省略requestError,response和responseError):

authServices.factory('TokenInterceptor', ['$q', '$window', '$location','AuthenticationService',function ($q, $window, $location, AuthenticationService) {
        return {
            request: function (config) {
                config.headers = config.headers || {};
                if ($window.sessionStorage.token) {
                    config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
                }
                return config;
            }               
        };
    }]);
Run Code Online (Sandbox Code Playgroud)

现在我想从令牌中获取登录的用户详细信息,我该怎么做?我尝试如下,不工作.当我从Users.js文件记录错误时,它说"ReferenceError:headers not defined"

authController.js:

$scope.me = function() {
    UserService.me(function(res) {
      $scope.myDetails = res;
    }, function() {
      console.log('Failed to fetch details');
      $rootScope.error = 'Failed to fetch details';
    })
  };
Run Code Online (Sandbox Code Playgroud)

authService.js:

authServices.factory('UserService',['$http', function($http) …
Run Code Online (Sandbox Code Playgroud)

javascript node.js jwt angularjs

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

JSON Web令牌到期

在大多数JWT(JSON Web Token)教程(例如:this and this)中,一旦经过验证,您可以使用传入令牌获取客户端信息,而无需从DB验证它.

我的问题是,如何维护无效的用户情况呢?我的意思是,假设一个客户端只有一个JWT令牌,它在一周内到期.但由于非常具体的原因,我们可以说我们决定使用户无效,并且不希望用户访问我们的API.但该用户仍然有一个有效的令牌,用户可以访问该API.

当然,如果我们为每个请求进行数据库往返,那么我们可以验证该帐户是有效还是无效.我的问题是,对于长寿代币来说,处理这种情况的最佳方法是什么.

提前致谢.

security oauth spring-security oauth-2.0 jwt

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

如何检查令牌过期和注销用户?

用户可以在他/她点击退出按钮时注销,但如果令牌过期,他/她无法注销,因为在我的应用程序中,令牌在服务器端和前端都使用.当用户单击注销按钮时,如果令牌有效,则清除服务器和浏览器中的令牌.当用户没有注销并且他/她的令牌过期但未在浏览器中清除时,有可能.为了解决这种情况,每次用户访问我的应用程序时如何检查令牌过期,如果令牌过期,请从浏览器中清除令牌?

我尝试在每次用户刷新页面或切换到另一页时在后台观看的saga.我不认为这是一种有效的方式.我认为中间件开始发挥作用.

function* loadInitialActions() {
  var dateNow = new Date();
  console.log(jwtDecode(token).exp < dateNow.getTime() - jwtDecode(token).iat);
  const token =
    JSON.parse(localStorage.getItem("user")) &&
    JSON.parse(localStorage.getItem("user"))["token"];
  if (
    token &&
    jwtDecode(token).exp < dateNow.getTime() - jwtDecode(token).iat
  ) {
    yield put(LOGOUT_SUCCESS);
  }
}

function* initialize() {
  const watcher = yield fork(loadInitialActions);
  yield take([INITIALIZE_ERROR, INITIALIZE_SUCCESS]);
  yield cancel(watcher);
}

function* rootSaga() {
  console.log("rootSaga");
  yield takeLatest(INITIALIZE, initialize);
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如果令牌从中间件到期,我如何使用令牌过期逻辑和注销用户?

javascript jwt reactjs redux redux-saga

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

不记名错误 - invalid_token - 未找到签名密钥

我有一个与 .Net Core 2.2 API 后端接口的 Angular 7 应用程序。这是与 Azure Active Directory 的接口。

在 Angular 7 方面,它正在使用 AAD 正确进行身份验证,并且我在jwt.io上得到了一个有效的 JWT 验证。

在 .Net Core API 方面,我创建了一个简单的测试 API [Authorize]

当我从 Angular 调用此方法时,在添加不记名令牌后,我得到(如 Chrome 调试工具、网络选项卡、“标题”中所示):

WWW-Authenticate: Bearer error="invalid_token", error_description="未找到签名密钥"

使用HTTP/1.1 401 Unauthorized

简单的测试 API 是:

    [Route("Secure")]
    [Authorize]
    public IActionResult Secure() => Ok("Secure works");
Run Code Online (Sandbox Code Playgroud)

Angular 调用代码也很简单:

    let params : any = {
        responseType: 'text',
        headers: new HttpHeaders({
            "Authorization": "Bearer " + token,
            "Content-Type": "application/json"
        })
    }

    this.http
        .get("https://localhost:5001/api/azureauth/secure", …
Run Code Online (Sandbox Code Playgroud)

c# jwt azure-active-directory asp.net-core angular

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

在哪里生成下一个身份验证的下一个身份验证秘密

NextAuth.js 的文档说我可以通过输入以下命令生成下一次身份验证的秘密:

openssl 兰德-base64 32

这是文档: https: //next-auth.js.org/configuration/options#nextauth_secret

但是,当我在 VS code 中的终端中输入命令时,出现此错误。 当我在文件路径中运行命令时,VS 代码中给出错误: PS C:\nextjs\Amazon-starter-template-nextjs>

我正在尝试在 Windows 上运行此命令。

authentication jwt next.js

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

如何在仅HTTP cookie中存储JWT令牌?

我创建了一个应用程序,它只使用服务器在正确的登录凭据上发送的JWT,并授权/api我的后端Express.js服务器上的任何路由.

另一方面,AngularJS使用此令牌,将其存储在会话存储中,并且每次使用auth拦截器将令牌发送回服务器.

我最近才明白这种做法有多危险.

在这种情况下,我理解来回传递令牌的方法.但是,如果您希望将JWT存储在客户端Javascript无法读取的安全的,仅HTTP的cookie中,那么有人会非常善意地解释发生的方法吗?

例如:凭证成功

  1. cookie在服务器上创建,
  2. 在cookie的同时创建一个JWT
  3. 将JWT存储在名为token等的cookie属性中.

我试图在这里获得一个关于它是如何工作的心智模型.如果我的理解是正确的,那么这样做就不再需要auth拦截器,因为在正确的凭证登录时,服务器将在cookie内完成所有的令牌传输.

cookies express jwt angularjs passport.js

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

使用Vue.js进行JWT身份验证

我正在使用Vue.js和vue-router开发SPA,现在我正在使用JWT处理授权/身份验证.我对后端(API端点)进行了整理,以便它响应登录时发出令牌,并在后续请求中检查必需的头.我现在想要实现客户端(Vue.js)方面.

据我了解,从根本上说,我需要做的是要求对除"/"和"/ login"之外的所有路由进行身份验证.如果存在身份验证,则我在Authorization标头中提交令牌(在成功登录后存储在localStorage中).如果无法在服务器上成功验证,则由于错误响应,用户将被重定向到"/ login".

所以,我有几个问题需要做些什么来实现这个:

  1. 除了登录端点之外,我如何最好地为每个请求提交标头?我知道JQuery,我用于AJAX,我可以配置一个全局'ajaxSetup',它将导致每个请求都提交头,但我如何指定异常?单独将标头添加到每个API端点请求是很麻烦的.

  2. 同样,如何设置一个身份验证预检查,适用于除上述2('/'和'/ login')之外的所有路由?

  3. 鉴于我正在使用显然有效的身份验证(显然是因为它仍然必须在API端点上进行验证)以确定是否显示某些菜单项等,是否可以使其更加精细化并根据令牌有效负载中的"范围"字段确定不同权限级别的不同内容?显然,处理JWT令牌的最简单方法纯粹是确定它是否存在,因此在客户端不需要解析内容.但鉴于JWT确实允许有意义的内容,尝试在客户端和服务器上使用该含义是一个坏主意吗?显然,如果令牌本身是加密的,那么这变得不太实用,所以我的想法是使用未加密的令牌(并确保在有效载荷中没有任何后果暴露).

jwt vue.js

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

如何在我的Flutter应用程序中获取JWT的声明

我正在编写一个Flutter/Dart应用程序,并从一个具有我需要使用的声明的auth服务器返回JWT.我看过各种(4至今)飞镖JWT库 - 但都太旧,并不再与飞镖2等工作,或者他们需要的秘密智威汤逊这是没有意义的,是不正确(解码或者可能,因为我没有访问权限).

那么 - 如何在"现代"的Dart/Flutter应用程序中获得JWT并从中获取声明?

jwt dart flutter

15
推荐指数
4
解决办法
5894
查看次数

.NET Web API:为不同的用户设置不同的刷新令牌到期时间

我正在使用Identity Server 3对我的角客户端进行身份验证并生成访问/刷新令牌.

我目前正在为我的Angular客户端设置刷新令牌在48小时后到期.

使用我的Angular应用程序的一些用户需要连续100天签名,而不必重新输入他们的凭据,是否可以仅为特定用户而不是整个客户端设置刷新令牌的到期时间?

我的数据库中有100个用户,我只希望一个特定用户在100天内不需要重新进行身份验证,而其他用户应该每48小时进行一次身份验证.

有点像:

if (user == "Super Man") {
    AbsoluteRefreshTokenLifetime = TimeSpan.FromDays(100.0).Seconds,
}
Run Code Online (Sandbox Code Playgroud)

这有可能实现吗?或者我是否仅限于为整个客户端设置刷新令牌过期?

谢谢

.net c# token jwt identityserver3

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

从 django-rest-framework-simplejwt 自定义 JWT 响应

我正在设置 Django 以发送 JWT 响应而不是视图。我尝试使用 django-rest-framework-simplejwt。

在这个框架中提供了一个TokenObtainPairView.as_view()返回一对jwt的函数。我需要使用另一个 Json 响应返回访问令牌,而不是提供的两个令牌。

理想情况下,我想要一个包含与此相同的访问令牌的 JsonResponse:TokenObtainPairView.as_view().

我尝试创建自己的视图,如下所示。

更新:在 Settings.py 中提供

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(days=1),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': False,
    'BLACKLIST_AFTER_ROTATION': True,

    'ALGORITHM': 'HS256',
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': None,

    'AUTH_HEADER_TYPES': ('Bearer',),
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',

    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',

    'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
    'SLIDING_TOKEN_LIFETIME': timedelta(days=1),
    'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
}
Run Code Online (Sandbox Code Playgroud)

登录网址路径

urlpatterns = [
    path('auth/', views.LoginView.as_view()),
]
Run Code Online (Sandbox Code Playgroud)

我创建的登录视图

class LoginView(APIView):
    permission_classes = (AllowAny,)

    def post(self, request, *args, **kwargs):
        username = request.data['username']
        password = request.data['password']

        user = …
Run Code Online (Sandbox Code Playgroud)

django json jwt angular

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