我想使用 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 技术不可知的最简单集成)
感谢您分享您的经验。
我已经使用 AWS Cognito和 boto3 python 实现了 TOTP MFA。一切正常,但我想知道如何重置 MFA,以防设备丢失。我在文档中没有找到任何机制。友善的建议。
python amazon-web-services amazon-cognito boto3 multi-factor-authentication
我正在尝试编写一个连接到数据库的 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)
但现在我需要使用不同的数据库和堡垒组合。这个堡垒有 …
我一直在尝试让 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,请遵循以下帖子:
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
你们中有人知道使用 PowerShell 与启用了 MFA 的 Azure AD 帐户执行 SQL 命令的选项吗?什么是替代方案?我需要为此创建一个服务主体吗?
我运气不好,只找到了这个 cmdlet,
Add-SqlAzureAuthenticationContext
但是当我尝试运行时Invoke-Sqlcmd,出现以下错误:
Invoke-Sqlcmd:目标主体名称不正确。无法生成 SSPI 上下文。
我目前正在尝试在我的 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
尝试在我的应用程序和用例中使用 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
我需要通过 SDK 确定特定 Cognito 用户的 MFA 配置。
我当前的逻辑基于AdminGetUserAPI,特别是基于userMFASettingList和preferredMfaSetting响应字段。
根据https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-cognito-identity-provider/modules/admingetuserresponse.html#usermfasettinglist,
userMFASettingList定义为
为用户激活的 MFA 选项。此列表中的可能值为 SMS_MFA 和 SOFTWARE_TOKEN_MFA。
whilemfaOptions被标记为已弃用,不鼓励使用。
我测试了一个具有强制 SMS MFA 的池,但它userMFASettingList是空的,尽管能够完成 MFA 挑战并通过 Cognito 托管 UI 成功登录。
这是一个错误吗?我应该使用什么逻辑?
amazon-web-services amazon-cognito multi-factor-authentication
我知道可以使用 AWS CLI 或 SDK 启用 S3 Bucket 上的 MFA 删除,就像本示例中所示。
但是对于 CloudFormation 模板,如果我想启用 MFA 删除,则必须使用此代码调用 lambda。
是否有可能以某种方式直接从 CloudFormation 模板启用 S3 存储桶的 MFA 删除而不调用特定的 lambda?
lambda amazon-s3 amazon-web-services aws-cloudformation multi-factor-authentication
使用setPreferredMFA时,即使设置了 setPreferredMFA,Cognito 用户池中的 SMS MFA 状态也会被禁用。
SMS MFA 状态代表什么?启用或禁用它时它会做什么?
谢谢
multi-factor-authentication ×10
python ×3
amazon-eks ×1
amazon-s3 ×1
aws-iam ×1
boto3 ×1
django ×1
jwt ×1
keycloak ×1
kubectl ×1
kubernetes ×1
lambda ×1
ssh-tunnel ×1