小编Sea*_*ndo的帖子

如何将API网关与微服务和JWT结合使用?

下午你们都

只是想找人来仔细检查我的工作.以下是保护微服务的有效方法吗?

前提

将我们的单片应用程序和单一的Partner API分解为面向特定业务功能的微服务.它们很可能是在docker容器中运行的小型expressjs应用程序,在弹性beanstalk上,谁知道.他们会住在某个地方:)

我正在研究将Kong作为我的API网关或使用AWS API Gateway来封装我的微服务的细节.而且,它感觉很好.

Kong 的JWT插件将验证JWT的签名,然后将customer_id标题中的一行传递给微服务.我还要提一下,我们的第三方开发人员也将参与集成乐趣.这是我看到的事情的基本草图:

履行

  1. 为我们拥有的每个平台和第三方开发人员生成"消费者".(网络应用,移动应用,我们有目前的集成合作伙伴注:我不希望为登录的每个用户创建消费者虽然肯定更安全,这增加了大量的工作同样,如果你弄清楚.如何从我的API网关中获取秘密我明显有其他问题)
  2. 让孔验证对我的要求.有点像门口的保镖,没有授权,只是认证.
  3. 我并不需要知道令牌是有效的,一旦它到达微服务,我可以使用一些中间件将其解码并使用自定义逻辑来决定是否该用户真正应该做的是什么,他们正在试图做的.

额外的东西

  • Kong有一个很好的访问控制插件.我们的应用程序和移动应用程序将以"上帝"权限运行,但我绝对可以将开发人员锁定到特定的路由和方法.

  • 撤销第三方访问将很容易,撤销最终用户访问将不会那么简单,除非我愿意通过生成新秘密立即使所有JWT无效.也许我可以限制令牌时间为10分钟左右,使我们的应用程序会检查他们是否过期,得到一个新的令牌,然后与原始请求得到.这样我就可以在数据库或其他东西中"标记"它们,而不是让JWT生成.

  • 在任何地方都使用SSL,JWT存储在Web浏览器中仅限SSL的cookie中,并且在任何声明中都没有存储敏感信息.

多谢你们.

security api jwt microservices kong

19
推荐指数
1
解决办法
3454
查看次数

我可以在 AWS Lambda 中指定 Node.js 命令行选项吗?

我正在使用 AWS SAM 并针对 Node 10.x 运行。

希望传递实验模块和顶级等待的标志。

谢谢!

aws-lambda serverless-application-model

8
推荐指数
1
解决办法
755
查看次数

如何避免在JavaScript应用程序中丢失"this"上下文?

以下是我的代码示例:

function QueueService() {
    var key = Config.get("AWS.accessKeyID");
    var secret = Config.get("AWS.secretKey");
    var credentials = new AWS.Credentials(key, secret, sessionToken = null);

    this._sqs = new Promise.promisifyAll(new AWS.SQS({apiVersion: '2012-11-05', region: "us-west-2", endpoint: "sqs.us-west-2.amazonaws.com", credentials: credentials}));
}

QueueService.prototype.FillBirdQueue = function(birds) {
    var self = this;

    birds.forEach(function(bird_batch) {
        var params = {
            Entries: bird_batch,
            QueueUrl: Config.get("AWS-Queue.Birds")
        };

        return self._sqs.sendMessageBatchAsync(params);
    });
};
Run Code Online (Sandbox Code Playgroud)

如果我省略var self = this;并调用return this._sqs.sendMessageBatchAsync(params);我得到一个错误,因为_.sqs未定义.它似乎this已经改变了,唯一的方法是保存它以供以后使用var self = this;.

我觉得有更好的方法来解决这个问题,但我并不完全确定如何使用这些工具.我目前正在使用Bluebird和Lodash,两者都支持绑定.在过去,我通过this在Bluebird中执行以下操作:

somethingAsync().bind(this).then(function(result){});
Run Code Online (Sandbox Code Playgroud)

我无法使用这种模式,因为我最初没有做任何异步.我只调用一个promise并且需要能够访问我在构造函数中定义的变量来执行此操作. …

javascript node.js promise lodash bluebird

6
推荐指数
0
解决办法
462
查看次数

Spark UDF 未并行运行

我正在尝试使用 Googlephonenumbers库的 Python 端口来规范化 5000 万个电话号码。我正在从 S3 上的 Parquet 文件读入 SparkDataFrame,然后在数据帧上运行操作。以下函数parsePhoneNumber表示为 UDF:

def isValidNumber(phoneNum):
    try:
        pn = phonenumbers.parse(phoneNum, "US")
    except:
        return False
    else:
        return phonenumbers.is_valid_number(pn) and phonenumbers.is_possible_number(pn)

def parsePhoneNumber(phoneNum):
    if isValidNumber(phoneNum):
        parsedNumber = phonenumbers.parse(phoneNum, "US")
        formattedNumber = phonenumbers.format_number(parsedNumber, phonenumbers.PhoneNumberFormat.E164)

        return (True, parsedNumber.country_code, formattedNumber, parsedNumber.national_number, parsedNumber.extension)
    else:
        return (False, None, None, None)
Run Code Online (Sandbox Code Playgroud)

下面是我如何使用 UDF 派生新列的示例:

newDataFrame = oldDataFrame.withColumn("new_column", parsePhoneNumber_udf(oldDataFrame.phone)).select("id", "new_column".national_number)
Run Code Online (Sandbox Code Playgroud)

通过运行display(newDataFrame)newDataFrame.show(5)类似方式执行 UDF仅使用集群中的一个执行器,因此 UDF 中的某些内容似乎不会导致它仅在一个工作程序上运行。

如果我正在做任何会阻止它并行运行的事情,你能提供一些见解吗?

执行环境位于由 Databricks 控制的云集群上。

编辑:下面是输出 oldDataFrame.explain

== Parsed Logical …
Run Code Online (Sandbox Code Playgroud)

python apache-spark pyspark databricks

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

如何在Promise.map中访问"this"?

我们知道,this下面是指window对象.我想知道的是我如何this在不诉诸var self=this;诡计的情况下传递我的背景.有任何想法吗?我尝试将.bind()添加到第9行的末尾,因此它可以读取,}).bind(this);但也不起作用.

有任何想法吗?

QueueService.prototype.FillCompanyQueue = function(companies) {
    return Promise.map(companies, function (company_batch) {
        var params = {
            Entries: company_batch,
            QueueUrl: Config.get("AWS-Queue.Company")
        };

        return this._sqs.sendMessageBatchAsync(params);
    });
};
Run Code Online (Sandbox Code Playgroud)

编辑:我标记了它,但应该提到我正在使用Bluebird.

编辑:修正了一个错字.

javascript node.js promise bluebird

4
推荐指数
1
解决办法
852
查看次数

ngClick事件未在Angular 1.5.5组件中触发

为什么不单击下面模板中描述的按钮按预期工作?这篇博文的内容完全相同.

'use strict';

angular.module('core').component('foo', {
    bindings: {
        items: '<',
    },
    controller: function() {
        function fire() {
            console.log('hello');
        }
    },
    template: "<button type='button' ng-click='$ctrl.fire();'>Test</button>"
});
Run Code Online (Sandbox Code Playgroud)

编辑:为问题添加了更多清晰度

angularjs angularjs-directive

4
推荐指数
1
解决办法
1514
查看次数

如果 AJAX 请求失败,Firefox 插件 sdk

请注意以下代码:

    $.ajax({
     type: "POST",
     url: loginURL,
     data: jsonArray,
     async: true,
     success: function(data, status){
         alert(status);
     },
     error: function(data, status){
         alert(status + " 1");
     }
});
Run Code Online (Sandbox Code Playgroud)

每次都会抛出错误案例,但我打开了提琴手,我从服务器接收数据就好了。我将面板附加到小部件。在面板中加载的 HTML 中,我包含了最新的 jquery 和登录 javascript 文件。

jquery firefox-addon-sdk

3
推荐指数
1
解决办法
2538
查看次数

电子邮件客户端忽略内部样式表

正常Web开发中的最佳实践要求在样式标记之间放置样式或加载样式表; 但是,我发现有几个电子邮件客户端会忽略任何样式标记,只执行内联样式(www.campaignmonitor.com).我可以解决这个问题,但我不确定CSS是否支持内联媒体查询.我希望我的电子邮件在桌面上显示一些不同.是否支持类似的东西?:

<div id="myDiv" style="@media screen and (max-width:480px;){ color:black; }"></div>
Run Code Online (Sandbox Code Playgroud)

css html-email

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

C#中无法识别的转义序列,从vb.NET转换而来

我正在尝试将vb函数转换为ac#方法.下面的表达式在C#中会是什么?

"<\ $日期\ $>"

这会在粘贴到C#项目时导致无法识别的转义序列

c# vb.net

0
推荐指数
1
解决办法
452
查看次数