javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

c.System.IdentityModel.Tokens和Microsoft.IdentityModel.Tokens之间的冲突

使用System.IdentityModel.Tokens时发生冲突:

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Text;

public voidGenereToken()
{
    const string sec = "401b09eab3c013d4ca54922bb802bec8fd5318192b0a75f201d8b3727429090fb337591abd3e44453b954555b7a0812e1081c39b740293f765eae731f5a65ed1";
    var now = DateTime.UtcNow;
    var securityKey = new InMemorySymmetricSecurityKey(Encoding.Default.GetBytes(sec));
    var signingCredentials = new SigningCredentials(securityKey,
            SecurityAlgorithms.RsaSha256Signature, SecurityAlgorithms.Sha256Digest);

    var header = new JwtHeader(signingCredentials);

    var payload = new JwtPayload
    {
        {"iss", "a5fgde64-e84d-485a-be51-56e293d09a69"},
        {"scope", "https://example.com/ws"},
        {"aud", "https://example.com/oauth2/v1"},
        {"iat", now},
    };

    var secToken = new JwtSecurityToken(header, payload);

    var handler = new JwtSecurityTokenHandler();
    var tokenString = handler.WriteToken(secToken);
    Console.writeLine(tokenString)
}

创建标头时出现以下错误(var header = new JwtHeader(signingCredentials);):

参数类型'System.IdentityModel.Tokens.SigningCredentials'不是   可分配给参数类型   'Microsoft.IdentityModel.Tokens.SigningCredentials'

我不明白,因为我所有的类型都指向System.IdentityModel.Tokens。在文档中,JwtHeader构造函数需要System.IdentityModel.Tokens.SigningCredentials

我不知道怎么了...

trans by 2020-02-17T03:32:53Z

ruby-警告:如果进行API开发,则无法验证CSRF令牌的真实性

我现在正在使用Ruby on Rails开发Web API。 当Rails应用收到没有任何csrf令牌的POST请求时,将发生以下错误消息。 因为该应用程序没有视图。

WARNING: Can't verify CSRF token authenticity

所以我的问题是在这种情况下如何安全地逃避csrf令牌检查?

提前非常感谢您。

trans by 2020-02-14T11:07:56Z

安全性-验证从移动(iPhone)应用到ASP.Net Web API的请求(在我的设计上请求了反馈)

我正在设计一个具有移动伴侣的网站(最初仅适用于iPhone)。 该网站将是一个ASP.Net MVC 3应用程序。 我还将拥有一个ASP.Net Web API站点(MVC 4),以向iPhone应用程序公开服务。 iPhone应用程序将具有自己的形式,以捕获用户的用户名和密码,并将其发送到JSON标头中的Web API。

我想从一开始就考虑安全性,而不是事后考虑。 我绝对不是安全专家。 我已经进行了大量研究,以了解他人如何处理来自Web服务的移动应用程序客户端的身份验证。 我想我想出了一个不错的解决方案,该解决方案不涉及加入第三方oAuth。

非常感谢您提供的任何意见,建议,批评和一般性WTF。 :)

我最大的担忧是:

  1. 确保对Web API的调用被授权
  2. 将重播攻击的风险降至最低(因此在下面的电话中有时间戳记)

iPhone应用程序将这样开发:
两个字符串被硬编码到iPhone应用程序中(每个用户的值相同):

  1. 申请编号
    这是一个字符串,用于标识正在访问Web API(iPhone,Android,Windows Phone等)的客户端类型。

  2. 应用程序的散列盐
    这是一个字符串,用于为用户不可知的请求加盐。

两个字符串存储在iPhone应用程序的本地数据库中(每个用户唯一的值):

  1. API用户访问令牌
    这是成功验证后由Web API提供给客户端的字符串(令牌),并允许客户端访问Web API,而无需在每个请求中发送用户名和密码。
  2. 用户的散列盐
    这是一个字符串,用于根据已建立的用户帐户对请求进行哈希处理。



iPhone将以以下方式调用Web API:

API方法:创建帐户
客户发送:

  • 新帐户数据(用户名,密码,名字,姓氏等)
  • 申请编号
  • UTC时间戳
  • UTC时间戳的哈希值+应用程序ID加上应用程序的哈希盐

API返回:

  • 新用户的哈希盐

    这里的想法是,在创建帐户时,我可以使用应用程序的硬编码盐,因为如果盐(通过反编译或其他方式)散发出来,这不会带来很大的安全风险。

    但是对于访问和修改用户数据的方法,我将使用仅由该用户拥有的盐,这样攻击者就无法使用它来假冒他人。


API方法:获取帐户
(用于获取用户在网站上创建但尚未在iPhone上同步的帐户的哈希值。当用户尝试登录iPhone且iPhone检测到该用户名没有记录时,会发生这种情况 )

客户发送:

  • 用户名
  • 密码(与应用程序的哈希盐一起哈希)
  • 申请编号
  • UTC时间戳
  • UTC时间戳的哈希值+应用程序ID加上应用程序的哈希盐

API返回:

  • 现有用户的哈希盐


API方法:登录(验证)
客户发送:

  • 用户名
  • 密码(与用户的哈希盐一起哈希)
  • 申请编号
  • UTC时间戳
  • UTC时间戳的哈希值+应用程序ID加上用户的哈希值

API返回:

  • API用户访问令牌


API方法:任何命令(即创建帖子,更新配置文件,获取消息等)
客户发送:

  • 命令数据
  • API用户访问令牌
  • 申请编号
  • UTC时间戳
  • UTC时间戳的哈希+应用程序ID + API用户访问令牌与用户的哈希盐一起使用
trans by 2020-02-08T03:39:57Z

javascript-在node.js中更改密码和注销时使JWT无效的最佳实践?

我想了解在更改密码/注销时不击db而使JWT无效的最佳实践。

我下面的想法是通过点击用户数据库来处理以上两种情况。

1.在更改密码的情况下,我检查存储在用户数据库中的密码(哈希)。

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

但是,这两种情况都是以用户每次点击api时每次点击用户db为代价的。 任何最佳实践都值得赞赏。

更新:  我不认为我们可以在不影响db的情况下使JWT失效。 所以我想出了一个解决方案。 我已经发布了我的答案,如果您有任何疑问,欢迎您。

trans by 2019-10-15T03:09:33Z

php - 为忘记密码生成随机令牌的最佳做法

我想生成忘记密码的标识符。 我读过我可以通过使用带有mt_rand()的时间戳来做到这一点,但是有些人说时间戳每次都不是唯一的。 所以我在这里有点困惑。 我可以使用时间戳吗?


生成自定义长度的随机/唯一标记的最佳做法是什么?

我知道这里有很多问题,但是在阅读了不同的人的不同意见后,我变得更加困惑。

trans by 2019-09-16T09:17:08Z

node.js - 带有node-jwt-simp的passport-local

如何在本地身份验证后,将本地护照与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);
    });
  }
));

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

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

如果没有,我该如何退回令牌?

trans by 2019-08-29T18:37:05Z

strtok()如何将字符串拆分为C中的标记?

请解释一下str函数的工作原理。手册说它把字符串分成了令牌。 我无法从手册中了解它实际上是做什么的。

我在str*pch上添加了手表以检查其工作情况,当第一个while循环发生时,str的内容仅为"这个"。 如何在屏幕上显示下面显示的输出?

/* strtok example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }
  return 0;
}

输出:

Splitting string "- This, a sample string." into tokens:
This
a
sample
string
trans by 2019-08-14T06:38:54Z

安全性 - 服务器端处理JWT令牌的最佳实践

(从这个线程产生,因为这实际上是一个问题,而不是NodeJS等)

我正在实现一个带有身份验证的REST API服务器,并且我已经成功实现了JWT令牌处理,以便用户可以使用用户名/密码通过/ login端口登录,在该端点上从服务器机密生成JWT令牌并返回到 客户。 然后,令牌在每个经过身份验证的API请求中从客户端传递到服务器,然后使用服务器机密来验证令牌。

但是,我正在努力了解有关如何以及在何种程度上验证令牌的最佳实践,以构建真正安全的系统。 究竟什么应该参与“验证”令牌? 是否可以使用server-secret验证签名,还是我还应该针对存储在服务器中的某些数据交叉检查令牌和/或令牌有效负载?

基于令牌的身份验证系统只会像在每个请求中传递用户名/密码一样安全,前提是获取令牌与获取用户密码同等或更加困难。 但是,在我看过的例子中,生成令牌所需的唯一信息是用户名和服务器端秘密。 这不意味着假设一分钟恶意用户获得服务器机密的知识,他现在可以代表任何用户生成令牌,从而不仅可以访问一个给定用户,如果密码是 获得了,但事实上对所有用户帐户?

这让我想到了一些问题:

1)JWT令牌验证是否应限于验证令牌本身的签名,单独依赖服务器机密的完整性,还是附带单独的验证机制?

  • 在某些情况下,我已经看到了令牌和服务器会话的组合使用,在成功登录/ login端点后会建立会话。 API请求验证令牌,并将令牌中找到的解码数据与会话中存储的某些数据进行比较。 但是,使用会话意味着使用cookie,并且在某种意义上它违背了使用基于令牌的方法的目的。 它也可能导致某些客户出现问题。

  • 可以想象服务器将当前正在使用的所有令牌保存在内存缓存或类似内容中,以确保即使服务器机密被泄露,以便攻击者可以生成“有效”令牌,也只有通过/ login端点生成的确切令牌 会被接受。 这是合理的还是只是多余/过度杀伤?

2)如果JWT签名验证是验证令牌的唯一方法,意味着服务器机密的完整性是一个突破点,那么应该如何管理服务器机密? 从环境变量读取并在每个部署的堆栈中创建(随机化?)一次? 定期重新创建或轮换(如果是这样,如何处理在轮换之前创建但需要在轮换之后进行验证的现有有效令牌,如果服务器在任何给定时间保持当前和之前的秘密,则可能就足够了)? 别的什么?

当谈到服务器机密被泄露的风险时,我可能只是过于偏执,这当然是一个需要在所有加密情况下解决的更普遍的问题......

trans by 2019-08-05T17:26:16Z

使用##和__LINE__创建C宏(使用定位宏进行标记连接)

我想创建一个C宏来创建一个基于名称的函数在行号上。我以为我可以做类似的事情(真正的函数会在括号内有声明):

#define UNIQUE static void Unique_##__LINE__(void) {}

我希望将扩展到以下内容:

static void Unique_23(void) {}

这不起作用。 使用令牌连接,定位宏按字面意思对待,最后扩展到:

static void Unique___LINE__(void) {}

这可能吗?

(是的,无论这看起来多么无用,我都有一个真正的理由要这样做)。

trans by 2019-08-05T14:18:32Z

api - 谷歌刷新令牌到期了吗?

我在短时间内多次使用刷新令牌进行测试,但我不知道,Google刷新令牌会过期吗? 或者我可以调用相同的刷新令牌以在很长一段时间(一周甚至几个月)内反复获取另一个访问令牌?

trans by 2019-08-04T00:33:50Z

安全性 - 如何在Android中安全地存储访问令牌和秘密?

我将使用oAuth从谷歌获取邮件和联系人。 我不想每次都要求用户登录以获取访问令牌和密码。 根据我的理解,我需要将它们与我的应用程序一起存储在数据库或SharedPreferences中。但我有点担心安全问题。 我读过你可以加密和解密令牌,但是攻击者很容易反编译你的apk和类并获得加密密钥。
在Android中安全存储这些令牌的最佳方法是什么?

trans by 2019-07-26T14:39:35Z

如何从Lucene TokenStream获取令牌?

我正在尝试使用Apache Lucene进行令牌化,我对从AttributeSource获取令牌的过程感到困惑。

最糟糕的是,我正在查看解决我的问题的JavaDocs中的注释。

[http://lucene.apache.org/java/3_0_1/api/core/org/apache/lucene/analysis/TokenStream.html#incrementToken%28%29]

不知何故,应该使用AttributeSource,而不是Token。 我完全不知所措。

任何人都可以解释如何从TokenStream获取类似令牌的信息吗?

trans by 2019-06-18T09:51:36Z

安全 - 什么是基于令牌的身份验证?

我想了解基于令牌的身份验证的含义。 我搜索了互联网,但找不到任何可以理解的东西。

trans by 2019-01-03T02:04:54Z

1 共1页