标签: token

验证套接字io连接

如何验证socket.io连接?我的应用程序使用来自另一台服务器(python)的登录端点来获取令牌,每当用户在节点端打开套接字连接时,我如何才能使用该令牌?

io.on('connection', function(socket) {
    socket.on('message', function(message) {
        io.emit('message', message);
    });
});
Run Code Online (Sandbox Code Playgroud)

而客户方:

var token = sessionStorage.token;
var socket = io.connect('http://localhost:3000', {
    query: 'token=' + token
});
Run Code Online (Sandbox Code Playgroud)

如果令牌是在python中创建的:

token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
Run Code Online (Sandbox Code Playgroud)

如何使用此令牌验证节点中的套接字连接?

token node.js flask socket.io

66
推荐指数
4
解决办法
5万
查看次数

语法错误:意外令牌<

我已经尝试了很多东西而且没有办法,总是出现这个错误我试图只使用一个选项来查看是否通过,改变了jquery的调用,但没有.

我在互联网上的各个地方查看了这个错误,但无法解决或理解为什么会发生这种错误.在我的电脑上使用EasyPHP工作得很好,但是当我上线不起作用.

语法错误:意外令牌<

这是我的代码:

$(function(){
$('#salvar').click(function(){
    var key = 'salvar';
    var title = $('#title').val();
    var opcao1 = $('#opcao1').val();
    var opcao2 = $('#opcao2').val();
    var opcao3 = $('#opcao3').val();
    var opcao4 = $('#opcao4').val();
    var opcao5 = $('#opcao5').val();
    var opcao6 = $('#opcao6').val();

    if(title.length > 0){
        if(opcao2.length > 0){
            $('#resposta').removeClass().html('Salvando a enquete...<br clear="all"><br><img src="images/switch-loading.gif" />');
            $.ajax({
            type : 'POST',
            url : 'funcoes/enquete_adm.php',
            dataType : 'json',
            data: {key:key,title:title,opcao1:opcao1,opcao2:opcao2,opcao3:opcao3,opcao4:opcao4,opcao5:opcao5,opcao6:opcao6},
            success : function(data){
                if(data.sql == 'ok'){
                        $('#resposta').addClass('success-box').html('Enquete Salva!').fadeIn(1000);
                        $('#control').fadeOut();
                    }else if(data.sql == 'error'){
                        $('#resposta').addClass('info-box').html('Ops, aconteceu um erro. Por …
Run Code Online (Sandbox Code Playgroud)

javascript ajax syntax jquery token

65
推荐指数
4
解决办法
34万
查看次数

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

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

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

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

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

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

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

javascript token auth-token node.js jwt

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

如何将Jenkins用户身份验证详细信息"传递"到使用Jenkins API创建作业的脚本?

我有一个脚本,通过curl HTTP调用删除和重新创建作业,我想摆脱任何硬编码的"用户名:密码".例如curl -X POST $url --user username:password

注意事项:

  • Jenkins CLI(可能不是一个选项).一个应该能够实现与Jenkins API相同的CLI(创建作业等),但据我所知,Jenkins CLI不适合我,因为创建的作业只会在重启后出现在Jenkins中或"重新加载" "从磁盘配置",这将取消任何其他正在运行的作业.

  • API令牌.无法找到如何获取用户令牌,然后将其作为参数传递给脚本,但这可能是一个解决方案..

api curl token jenkins

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

调用web api时C#不支持的授权类型

我正在尝试从ac#WPF桌面应用程序执行发布到我的WebAPI.

无论我做什么,我都会

{ "错误": "unsupported_grant_type"}

这就是我尝试过的(我已经尝试过所有可以找到的东西):

此外,dev web api目前正在进行测试:http://studiodev.biz/

基本http客户端对象:

var client = new HttpClient()
client.BaseAddress = new Uri("http://studiodev.biz/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
Run Code Online (Sandbox Code Playgroud)

使用以下发送方法:

var response = await client.PostAsJsonAsync("token", "{'grant_type'='password'&'username'='username'&'password'='password'");
var response = await client.PostAsJsonAsync("token", "grant_type=password&username=username&password=password");
Run Code Online (Sandbox Code Playgroud)

在那次失败后,我做了一些谷歌搜索并尝试:

LoginModel data = new LoginModel(username, password);
string json = JsonConvert.SerializeObject(data);
await client.PostAsync("token", new JsonContent(json));
Run Code Online (Sandbox Code Playgroud)

同样的结果,所以我试过:

req.Content = new StringContent(json, Encoding.UTF8, "application/x-www-form-urlencoded");
await client.SendAsync(req).ContinueWith(respTask =>
{
 Application.Current.Dispatcher.Invoke(new Action(() => { label.Content = respTask.Result.ToString(); }));
});
Run Code Online (Sandbox Code Playgroud)

注意:我可以通过Chrome成功拨打电话.

更新Fiddler结果

在此输入图像描述

请有人帮我成功拨打上述网页API …

c# wpf httpclient token asp.net-web-api

60
推荐指数
4
解决办法
6万
查看次数

在哪里存储客户端上的刷新令牌?

我的 SPA 应用程序使用以下架构(来源):

在此处输入图片说明

这假设我的客户端应用程序知道刷新令牌,因为如果不存在用户凭据(例如电子邮件/密码),我需要它来请求新的访问令牌。

我的问题:我在哪里存储我的客户端应用程序中的刷新令牌?关于这个话题有很多关于 SO 的问题/答案,但关于刷新令牌,答案尚不清楚。

访问令牌和刷新令牌不应存储在本地/会话存储中,因为它们不是任何敏感数据的地方。因此,我会将访问令牌存储在httpOnlycookie 中(即使有 CSRF),无论如何,我对资源服务器的大多数请求都需要它。

但是刷新令牌呢?我不能将它存储在 cookie 中,因为 (1) 它会随着每个请求发送到我的资源服务器,这也使它容易受到 CSRF 的攻击和 (2) 它会发送暴露访问/刷新令牌与相同的攻击向量.

我能想到的解决方案有以下三种:


1) 将刷新令牌存储在内存中的 JavaScript 变量中,这有两个缺点:

  • a) 易受 XSS 攻击(但可能不如本地/会话存储那么明显
  • b) 如果用户关闭浏览器选项卡,它会丢失“会话”

尤其是后一个缺点会导致糟糕的用户体验。


2) 将访问令牌存储在会话存储中,并通过Bearer access_token授权标头将其发送到我的资源服务器。然后我可以使用httpOnlycookie 作为刷新令牌。这有一个我能想到的缺点:

  • a) 每次向资源服务器发出请求时,刷新令牌都会暴露给 CSRF。

3) 将两个令牌保存在httpOnlycookie 中,这具有上述缺点,即两个令牌都暴露于相同的攻击向量。


也许除了我提到的缺点之外还有另一种或更多的方式(请告诉我),但最终一切都归结为我将刷新令牌保存在客户端的什么位置?它是httpOnlycookie 还是内存中的 JS 变量?如果是前者,那么我应该把我的访问令牌放在哪里?

很高兴从熟悉该主题的人那里获得有关如何以最佳方式执行此操作的任何线索。

authentication cookies oauth token oauth-2.0

58
推荐指数
4
解决办法
5万
查看次数

验证从移动(iPhone)应用程序到ASP.Net Web API的请求(在我的设计上请求反馈)

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

我想从一开始就考虑安全性,而不是经过深思熟虑.我无论如何都不是安全专家.我做了很多研究,看看其他人是如何处理来自Web服务的移动应用程序客户端的身份验证.我想我已经提出了一个不错的解决方案,不涉及到第三方oAuths.

我非常感谢任何人提供的任何和所有意见,建议,批评和一般WTF.:)

我最担心的是:

  1. 确保对Web API的调用获得授权
  2. 最大限度地降低重播攻击的风险(因此下面的调用中的时间戳)

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

  1. 应用程序ID
    这是一个字符串,用于标识正在访问Web API(iPhone,Android,Windows phone等)的客户端类型.

  2. 应用程序的散列盐
    这是一个字符串,用于为用户不可知的请求提供哈希值.

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

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



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

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

  • 新帐户数据(用户名,密码,名字,姓氏等)
  • 应用程序ID
  • UTC时间戳
  • 使用应用程序的哈希盐盐化的UTC时间戳+应用程序ID的哈希值

API返回:

  • 新用户的哈希盐

    这里的想法是,在创建帐户时,我可以使用应用程序的硬编码盐,因为如果盐已经通过反编译或其他方式,它不会带来巨大的安全风险.

    但是对于访问和修改用户数据的方法,我将使用仅由该用户拥有的salt,因此攻击者无法使用它来模仿其他人.


API方法:获取帐户
(用于获取用户的哈希盐,用于在网站上创建但尚未在iPhone上同步的帐户.当用户尝试登录iPhone并且iPhone检测到它有没有该用户名的记录.)

客户发送:

  • 用户名
  • 密码(使用应用程序的哈希盐进行哈希处理)
  • 应用程序ID
  • UTC时间戳
  • 使用应用程序的哈希盐盐化的UTC时间戳+应用程序ID的哈希值

API返回:

  • 现有用户的哈希盐


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

  • 用户名
  • 密码(用户的哈希盐哈希)
  • 应用程序ID
  • UTC时间戳
  • 使用用户的哈希盐盐化的UTC时间戳+应用程序ID的哈希值

API返回:

  • API用户访问令牌


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

  • 命令数据
  • API用户访问令牌
  • 应用程序ID
  • UTC时间戳
  • 使用用户的哈希盐盐化的UTC时间戳+应用程序ID + API用户访问令牌的哈希值

security iphone authentication token asp.net-web-api

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

警告:在API开发的情况下无法验证CSRF令牌的真实性

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

WARNING: Can't verify CSRF token authenticity
Run Code Online (Sandbox Code Playgroud)

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

非常感谢你提前.

ruby api csrf token ruby-on-rails-3

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

-bash:意外标记'newline'附近的语法错误

要重置SolusVM的管理员密码,我正在执行以下命令:

php /usr/local/solusvm/scripts/pass.php --type=admin --comm=change --username=<ADMINUSERNAME>
Run Code Online (Sandbox Code Playgroud)

执行此操作时,将打印以下错误消息:

-bash: syntax error near unexpected token `newline'
Run Code Online (Sandbox Code Playgroud)

这个问题的原因是什么?我以root身份运行命令.

syntax bash newline token

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

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)
}
Run Code Online (Sandbox Code Playgroud)

我创建标题时出现以下错误(var header = …

c# token jwt

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