小编Rya*_*sch的帖子

在 dockerfile 中运行 sed 以用构建 arg 值替换文本

我正在尝试使用 sed 将 nginx.conf 中的文本“localhost”替换为我的 docker 主机的 IP 地址(仅供参考。在本地使用 docker 机器,它在 192.168.99.100 上运行 docker)。

我的 nginx Dockerfile 如下所示:

FROM nginx:alpine
ARG DOCKER_HOST
COPY ./nginx.conf /etc/nginx/nginx.conf
RUN sed -i 's/localhost/${DOCKER_HOST}/g' /etc/nginx/nginx.conf
EXPOSE 80
Run Code Online (Sandbox Code Playgroud)

我的 nginx.conf 文件看起来像这样(注意:为简单起见,删除了多数)

http {

   sendfile on;

   upstream epd {
      server localhost:8080;
   }

   # ...
}
Run Code Online (Sandbox Code Playgroud)

我期待“localhost”被替换为“192.168.99.100”,但它实际上被替换为“${DOCKER_HOST}”。这会导致错误

在上游“${DOCKER_HOST}:8080”中找不到主机

我已经尝试了一些其他的东西,但我似乎无法让这个工作。我可以确认 DOCKER_HOST 构建参数正在通过我的 docker compose 脚本进入 Dockerfile,因为我可以回应这一点。

非常感谢您的任何答复...

sed dockerfile

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

OAuth-2.0/JWT - 关于何时使用作用域和角色的指南

我非常精通与OAuth 2.0 和 JWT 相关的大多数事情,但仍然有点令人困惑的一件事是是否/何时使用作用域与角色。

我认为一些混乱来自基于角色的授权在 ASP.NET Core(这是我工作场所的主要语言/框架)中的工作方式。例如; 如果我在 JWT 中有如下角色

{
  "aud": "test",
  "iss": "http://localhost:8080/auth/realms/test/",
  "iat": 1585192274,
  "nbf": 1585192274,
  "exp": 1585196174,
  "sub": "12345",
  "roles": ["Admin", "SuperUser"]
}
Run Code Online (Sandbox Code Playgroud)

我可以很容易地保护路线,而无需做太多事情,例如:

[ApiController]
[Route("api/v{version:apiVersion}/template/test")]
public class TestController : Controller
{
    [HttpGet]
    [Authorize(Roles = "Admin")]
    public IActionResult Get()
    {
        return Ok("test");
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用具有 dotnet 授权策略的范围来实现与上述非常相似的内容,但我只想知道是否有关于是否/何时使用范围或角色的指导,或者这只是一个偏好问题......

我在任何与 OAuth/JWT 相关的 RFC 中都找不到对角色声明的太多参考,而在整个过程中都提到了作用域。

authorization scopes oauth-2.0 jwt role-based-access-control

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

根据属性类型/值推迟选择子验证器

在FluentValidation中是否有扩展或其他方式来推迟选择子验证器,具体取决于要验证的属性的类型/值?

我的情况是我有一个我要验证的Notification类.这个类有一个Payload属性,它可以是许多Payload类型之一,例如SmsPayload,EmailPayload等.这些Payload子类中的每一个都有自己的相关验证器,例如SmsPayloadValidator和EmailPayloadValidator.除上述内容外,核心库和个别通知提供者均未提及.从本质上讲,这意味着我可以根据需要添加提供程序,并使用IoC连接所有内容.

考虑以下类:

public class Notification
{
    public Payload Payload { get; set; }
    public IEnumerable<string> Details { get; set; }
}

public abstract class Payload
{
    public string Message { get; set; }
    public abstract string Type { get; }
}

public class SmsPayload : Payload
{
    public List<string> Numbers { get; set; }
    public string Region { get; set; }
    public string Provider { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

有一个Notification验证器和SmsPayloadValidator如下:

public class NotificationValidator : AbstractValidator<Notification>
{
    public NotificationValidator(IValidator<Payload> payloadValidator) …
Run Code Online (Sandbox Code Playgroud)

.net validation expression-trees fluentvalidation simple-injector

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

处理开放API规范中的authorizationUrl和tokenUrl的多个环境

是否可以以某种方式模板化 oauth2 安全方案的基本路径authorizationUrltokenUrl处理多个环境(例如 dev、sit、uat)?

我工作的公司每个环境都有一个单独的 IDP 租户,每个环境中的服务将针对特定租户/发行者验证令牌。

理想情况下,我可以定义和选择租户基本 URL,类似于我为 API 路由创建服务器模板的方式 - 请参阅此处
在此输入图像描述

我的securitySchemes目前看起来像这样:

"securitySchemes": {
    "oauth": {
        "type": "oauth2",
        "flows": {
            "authorizationCode": {
                "authorizationUrl": "https://tenant-dev.au.auth0.com/authorize?audience=test",
                "tokenUrl": "https://tenant-dev.au.auth0.com/oauth/token"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我能想到的唯一多环境方法是使用以下安全方案配置,它允许我指定任何 JWT。缺点是我仍然需要通过一些外部手段获取 JWT...

"securitySchemes": {
    "oauth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
    }
}
Run Code Online (Sandbox Code Playgroud)

笔记;

  • 我们使用外部 IDP,因此 IDP 基本 URL 不会与服务基本 URL 重叠。
  • Swagger UI 在生产环境中将无法访问,但仍然有 dev、sit 和 uat。

swagger openapi

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

在 gitflow 中处理发布分支

我工作的公司正在使用 gitflow。

我们遵循每个功能分支的方法,其中实现、测试单个功能,然后 PR 进入开发阶段。当需要发布时,我们会在开发之外创建一个发布分支 - 我们在发布分支上触发构建并将其部署到 TEST 环境。由于合并到开发中的多个功能分支,可能存在一些集成缺陷。这些是直接针对发布分支解决的。一旦我们很高兴与发布分支,我们部署(确切的状态同样是签署过建立由QA),以督促。

在这个阶段,我们需要让我们的发布分支代码回到 develop 并进入 master,这两个分支都是受保护的分支。假设有一些针对 release 分支的提交,我们需要做 2 个 PR,即一个用于 release->develop,一个用于 release->master。

几个问题:

  1. 人们如何直接针对发布分支审查提交?我们 可以在实际发布之前重新进行 PR 开发,但这对我来说似乎有点不合时宜。
  2. 人们如何处理将发布分支合并到开发和主分支中的方法。要开发的 PR 只是直接针对发布分支进行的提交,而要掌握的 PR 还将包括已经 PRd 到开发中的所有功能。掌握的公关似乎有点过时了。

谢谢。

git branching-and-merging git-flow

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

Azure DevOps 默认权限

在 Azure DevOps 中,git repos 的分支安全将所有 Azure DevOps 组的“强制推送”属性默认为“未设置”。这实际上拒绝了此权限。

我们在我工作的地方关注 gitflow,并且通常会明确拒绝持久分支、Master 和 Develop 的此权限;但是,对于功能分支,我宁愿将其默认为“允许”,这样管理员就不必参与其中。有没有办法将所有分支的 Azure DevOps“贡献者”组的“强制推送”默认为“允许”,除非明确设置为“拒绝”?

干杯。

git azure-devops

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

在.NET Core Generic Host中使用健康检查中间件

将 .NET Core通用主机用于处理异步消息的应用程序。

我们使用通用主机而不是 .NET Core WebHost 的原因是因为我的一位同事曾见过几次 MassTransit(我们正在使用的轻量级服务总线框架)作为 .NET Core 的一部分运行在 Linux 上,WebHost 并不总是在收到 SIGTERM 信号后正常关闭 - 我们必须使用 SIGKILL 来强行终止进程。

该应用程序将在 Kubernetes 上运行,我们希望使用 K8s 活性探针实现自我修复架构。在其他使用 WebHost 的 .NET Core 应用程序中,我们使用了.NET Core 2.2 中引入的运行状况检查,但我不知道如何在通用主机中使用这样的中间件。

在 WebHost 中,我可以按如下方式配置中间件:

app.UseHealthChecks(appSettings.HealthChecksPath ?? "/health");
Run Code Online (Sandbox Code Playgroud)

如果使用 .NET Core 通用主机,我将如何去做呢...

亲切的问候。

.net-core asp.net-core asp.net-core-middleware asp.net-core-2.2 .net-core-2.2

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

通过 Swagger UI (.NET) 使用客户端凭据对 Auth0 进行身份验证时出现问题

我正在尝试使用客户端凭据通过 Swagger UI(由 Swashbuckle.AspNetCore 自动生成)向我的 Auth0 租户进行身份验证。

我收到以下错误:

Auth ErrorError,错误:access_denied,描述:不允许非全局客户端访问 APIv1

这是一个屏幕截图:

在此输入图像描述

开放 API 规范如下所示:

"securitySchemes": {
   "auth0": {
      "type": "oauth2",
      "flows": {
         "clientCredentials": {
            "tokenUrl": "https://example.auth0.com/oauth/token"
         },
         "authorizationCode": {
            "authorizationUrl": "https://example.auth0.com/authorize?audience=test",
            "tokenUrl": "https://example.auth0.com/oauth/token",
            "scopes": { }
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

audience我怀疑这与未指定有关。我在授权代码流方面遇到了类似的问题,但设法通过将受众作为查询字符串参数附加到authorizationUrl(如上所示)来实现此工作。不幸的是,同样的技巧不适用于客户端凭证流(即尝试将受众附加到tokenUrl)。我需要支持客户端凭证流,因为一条或多条路由需要仅锁定到 M2M 令牌。

有趣的是,如果我使用全局客户端 ID/秘密(在租户的高级设置下找到),它就可以工作,但我不确定我们是否应该使用它......

其他人也遇到过这个问题,如果是的话,找到解决方案是否运气好?

swagger-ui auth0 swashbuckle openapi swashbuckle.aspnetcore

5
推荐指数
0
解决办法
1309
查看次数

具有部分历史记录的git tfs clone

我正在尝试将TFS存储库迁移到git,但我遇到了一个问题.

查看TFS中此特定存储库的历史记录,看起来好像已将父级复制到新的TFS存储库中,然后稍后将父级无基础合并到其中(或类似的东西).

当我运行"git tfs clone"命令时,我收到错误:

git-tfs无法找到分支'$/x'与其父分支'$/y'之间的根变更集(即最后一次常见提交)...

是否可以使用git tfs clone限制历史记录?我知道我可以使用快速克隆,但这只能给我最后的提交.理想情况下,我想回到特定的更改集,或者排除没有共同父级的无基础合并变更集...

干杯!

git tfs git-tfs

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

使用 Keycloak 和 .NET 核心的基于角色的授权

dotnet core 2.2.3 和 Keycloak 4.5.0 基于角色的授权存在一些小问题。

在 Keycloak 中,我定义了一个“tester”角色和一个客户端角色“developer”,并为“admin”用户定义了适当的角色映射。在对 Keycloak 进行身份验证后;如果我查看 jwt.io 中的 JWT,我可以看到以下内容:

{
  "realm_access": {
    "roles": [
      "tester"
    ]
  },
  "resource_access": {
    "template": {
      "roles": [
        "developer"
      ]
    },
    ...
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

在 .NET 核心中,我尝试了很多事情,例如添加[Authorize(Roles = "tester")][Authorize(Roles = "developer")]到我的控制器方法以及使用基于策略的授权,我context.User.IsInRole("tester")在其中检查我的AuthorizationHandler<TRequirement>实现。

如果我在身份验证处理程序中设置了一些断点。当它被击中时,我可以看到“tester”和“developer”角色列为context.user.ClaimsIEnumerable下的项目,如下所示。

{realm_access: {"roles":["tester"]}}
{resource_access: {"template":{"roles":["developer"]}}}
Run Code Online (Sandbox Code Playgroud)

所以,我应该能够被用于验证值做成功的AUTH处理器的授权realm_accessresource_accesscontext.user.Claims集,但这需要我反序列化要求值,这只是似乎是JSON字符串。

我在想必须有更好的方法,或者我没有做对的事情。

authorization oauth keycloak .net-core

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