标签: multi-factor-authentication

Keycloak:针对特定资源的 2FA 保护

我想使用 2FA 保护高级别风险功能。过去,我们使用 2FA SMS。我想提出相同的功能,但理想情况下,我希望能够集成本地 Keycloak OTP 身份验证器(更安全)。这就是为什么基于 keycloak-sms-authenticator-sns https://github.com/nickpack/keycloak-sms-authenticator-sns> ,我改进了这个身份验证器(我将很快提出合并请求)。

我在 Keycloak 3.4.3 文档中进行了搜索,但使用相同的领域,我没有看到任何功能可以在最终用户想要访问特定资源时询问 2FA。角色机制允许管理访问(403 - 200),但它似乎没有涵盖我的用例。我不确定 UMA 2.0 是否可以提供此功能。此外,它还没有实施。保证水平似乎很好,但尚未实施,而且很难做到。

我可以在业务应用程序(JBoss 适配器)上包含一个 servlet 过滤器,以便在用户想要访问资源时将其路由到 2FA 身份验证器。但在这种情况下,我必须在 Keycloak 和 Java 适配器之间传播一个状态,以免每次访问都要求 2FA 代码。在集群模式(无状态服务)下可能有点棘手。

您有什么想法可以根据本机 keycloak 功能轻松涵盖此用例吗?如果情况并非如此,在您看来,最佳解决方案是什么(见上文)?(可维护性、集群支持和 2FA 技术不可知的最简单集成)

感谢您分享您的经验。

keycloak multi-factor-authentication

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

在 Amazon Cognito MFA 中恢复

我已经使用 AWS Cognito和 boto3 python 实现了 TOTP MFA。一切正常,但我想知道如何重置 MFA,以防设备丢失。我在文档中没有找到任何机制。友善的建议。

python amazon-web-services amazon-cognito boto3 multi-factor-authentication

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

如何使用 2FA 进行 python SSH tunneling?

我正在尝试编写一个连接到数据库的 python 脚本,但是只有当您首先通过 SSH 连接到堡垒主机时才能访问该数据库。从命令行,这是我必须做的来设置隧道:

$ ssh -i /path/to/my/key/file.pem -A -L 3307:mydb1.fsd23rqr.us-east-1.rds.amazonaws.com:3306 my_ssh_username1@my-bastion-host.without.2fa
[ec2-user@ip-X-X-X-X ~]$ 
Run Code Online (Sandbox Code Playgroud)

我已经使用这个sshtunnel 库创建了一个 python 脚本来做同样的事情。有用:

#!/usr/bin/env python
from sshtunnel import SSHTunnelForwarder
import MySQLdb as db
import pandas as pd

print('\nAbout to try connecting')
with SSHTunnelForwarder(
    ('my-ssh-host.without.2fa', 22),
    ssh_username='my_ssh_username1',
    ssh_pkey='/path/to/my/key/file.pem',
    remote_bind_address=('mydb1.fsd23rqr.us-east-1.rds.amazonaws.com', 3306),
    local_bind_address=('0.0.0.0', 3307)
) as tunnel:
    print "Connection Established"
    print pd.read_sql_query(
        "select 'Hello' from dual",
        db.connect(
            host='127.0.0.1',
            port=tunnel.local_bind_port,
            user='my_db_username1',
            passwd='****************',
            db='my_db_instance_1'
        )
    )
Run Code Online (Sandbox Code Playgroud)

产生:

About to try connecting
Connection Established
   Hello
0  Hello
Run Code Online (Sandbox Code Playgroud)

但现在我需要使用不同的数据库和堡垒组合。这个堡垒有 …

python ssh-tunnel multi-factor-authentication

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

将 MFA 与 EKS kubectl 和 aws-iam-authenticator 结合使用

我一直在尝试让 MFA 与 kubectl 一起工作,以保护对 AWS 中 EKS 主节点的访问。文档似乎暗示这是可能的,但我遇到了问题,我无法弄清楚。

没有什么特别的,我可以连接到我的 EKS 集群:

kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   172.20.0.1   <none>        443/TCP   2d
Run Code Online (Sandbox Code Playgroud)

如果我将 MFA 添加到 AWS CLI,请遵循以下帖子:

如何将 MFA 与 AWS CLI 结合使用?

https://docs.aws.amazon.com/cli/latest/userguide/cli-roles.html

我像这样设置我的本地凭据:

[default]
aws_access_key_id = **********************
aws_secret_access_key = **********************
region = us-west-2

[default_role]
mfa_serial = arn:aws:iam::1234567890:mfa/spanktar
role_arn = arn:aws:iam::1234567890:role/test_assumeRole
source_profile = default
Run Code Online (Sandbox Code Playgroud)

...然后我可以看到 AWS CLI 具有 MFA:

aws sts get-caller-identity --profile default_role
Enter MFA code for arn:aws:iam::1234567890:mfa/spanktar: 123456
{
    "UserId": "**********************:botocore-session-1234567890",
    "Account": …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubectl aws-iam multi-factor-authentication amazon-eks

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

使用在 Azure 中使用 MFA 的帐户调用 Sqlcmd

你们中有人知道使用 PowerShell 与启用了 MFA 的 Azure AD 帐户执行 SQL 命令的选项吗?什么是替代方案?我需要为此创建一个服务主体吗?

我运气不好,只找到了这个 cmdlet, Add-SqlAzureAuthenticationContext 但是当我尝试运行时Invoke-Sqlcmd,出现以下错误:

Invoke-Sqlcmd:目标主体名称不正确。无法生成 SSPI 上下文。

invoke-sqlcmd azure-sql-server multi-factor-authentication

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

重写 simple-jwt 的 TokenObtainPairSerializer 来实现 2FA

我目前正在尝试在我的 Django 应用程序中实现双因素身份验证。我做的第一件事是修改Meta类中的类UserSerializer以添加两个字段enabled(指示用户是否启用 2FA 的布尔值)和secret_key(生成 OTP 的密钥,当用户启用 2FA 时共享给用户)。

为了最大限度地修改登录流程,我修改了发送以生成访问令牌的表单,以包含新字段“otp”。用户可以填写也可以不填写,后端会检查用户是否启用了2FA,如果是,OTP是否正确。

如果没有 2FA,登录只是一个带有 body 的 POST 请求{"username": usr, "password": pwd}。这已成为带有 body 的 POST 请求{"username": usr, "password": pwd, "otp": otp}。如果用户尚未启用 2FA,他只需将该opt字段留空即可。

我的urls.py看起来像这样:

path("api/token/", TokenObtainPairView.as_view(), name="token_obtain_pair")
Run Code Online (Sandbox Code Playgroud)

我的想法是重写 TokenObtainPairView 以适应新的请求。根据我的发现,我必须改变validate方法,但我真的不知道如何做到这一点。enabled我可能必须获取用户的和字段的值secret_key(基于用户名)来生成 OTP(如果相关)并根据字段进行检查otp。问题是,我不知道该怎么做,而且我在 simple-jwt 实现中有点迷失了。

python django jwt django-rest-framework multi-factor-authentication

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

AWS Cognito - 为每个用户启用 MFA

尝试在我的应用程序和用例中使用 Cognito 设置身份验证需要基于每个用户的 MFA。也就是说,在创建相应的用户池时,我已将 MFA 配置为Optional并选择TOTP为潜在的 MFA 选项。到目前为止一切顺利,用户池就位后,我正在创建一个用户(创建后),我尝试在 Kotiln 应用程序中将首选 MFA 方法设置为 TOTP,因此下次用户登录时,他收到设置基于 TOTP 的 MFA 的提示。

根据API文档,这应该是可能的,如下所示:https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html

代码快照如下所示:

val cognitoClient: CognitoIdentityProviderClient = CognitoIdentityProviderClient.builder()
      .region(Region.US_EAST_1)
      ...
      .build()

    val mfaPreferenceRequest = AdminSetUserMfaPreferenceRequest.builder()
      .userPoolId("us-east-1-some-pool-id")
      .username("test")
      .softwareTokenMfaSettings(
        SoftwareTokenMfaSettingsType.builder()
          .enabled(true)
          .preferredMfa(true)
          .build()
      ).build()

    cognitoClient.adminSetUserMFAPreference(mfaPreferenceRequest)
Run Code Online (Sandbox Code Playgroud)

当调用时,我收到以下异常/堆栈跟踪

InvalidParameterException: User does not have delivery config set to turn on SOFTWARE_TOKEN_MFA.
Run Code Online (Sandbox Code Playgroud)

关于可能导致此问题的任何线索?

amazon-web-services amazon-cognito multi-factor-authentication

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

AdminGetUserResponse 的 UserMFAsettingList 字段为空

我需要通过 SDK 确定特定 Cognito 用户的 MFA 配置。

我当前的逻辑基于AdminGetUserAPI,特别是基于userMFASettingListpreferredMfaSetting响应字段。

根据https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-cognito-identity-provider/modules/admingetuserresponse.html#usermfasettinglistuserMFASettingList定义为

为用户激活的 MFA 选项。此列表中的可能值为 SMS_MFA 和 SOFTWARE_TOKEN_MFA。

whilemfaOptions被标记为已弃用,不鼓励使用。

我测试了一个具有强制 SMS MFA 的池,但它userMFASettingList是空的,尽管能够完成 MFA 挑战并通过 Cognito 托管 UI 成功登录。

清空用户MFSettingList

池设置的强制 MFA

这是一个错误吗?我应该使用什么逻辑?

amazon-web-services amazon-cognito multi-factor-authentication

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

从 CloudFormation 模板在 S3 存储桶上启用 MFA 删除

我知道可以使用 AWS CLI 或 SDK 启用 S3 Bucket 上的 MFA 删除,就像本示例中所示。

但是对于 CloudFormation 模板,如果我想启用 MFA 删除,则必须使用此代码调用 lambda。

是否有可能以某种方式直接从 CloudFormation 模板启用 S3 存储桶的 MFA 删除而不调用特定的 lambda?

lambda amazon-s3 amazon-web-services aws-cloudformation multi-factor-authentication

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

Cognito 用户池中的 SMS MFA 状态是通过调用 setPreferredMFA 设置的还是其他内容?

使用setPreferredMFA时,即使设置了 setPreferredMFA,Cognito 用户池中的 SMS MFA 状态也会被禁用。

SMS MFA 状态代表什么?启用或禁用它时它会做什么?

谢谢

amazon-cognito multi-factor-authentication

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