- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在为一个项目实现 webauthn。重点是让用户可以在网站上的手机上使用 FaceId 或指纹扫描。
我尝试了 webauthn 的 djoser 版本,但我想为已经拥有帐户的用户提供这种可能性,所以我实现了 djoser 的 webauthn 并更新了它,使其可以与已经创建的帐户一起使用。
我可以请求 webauthn token 的注册请求,并在我使用 @simplewebauthn/browser ("@simplewebauthn/browser": "^6.3.0-alpha.1") 。那里一切正常。
我通过拉动 git 使用最新版本的 djoser,webauthn 的版本是 0.4.7 链接到 djoser。
djoser @git+https://github.com/sunscrapers/djoser.git@abdf622f95dfa2c6278c4bd6d50dfe69559d90c0
webauthn==0.4.7
但是当我把注册的结果发回后台时,报错:
身份验证被拒绝。错误:收到无效签名..
这是 SignUpView:
permission_classes = (AllowAny,)
def post(self, request, ukey):
co = get_object_or_404(CredentialOptions, ukey=ukey)
webauthn_registration_response = WebAuthnRegistrationResponse(
rp_id=settings.DJOSER["WEBAUTHN"]["RP_ID"],
origin=settings.DJOSER["WEBAUTHN"]["ORIGIN"],
registration_response=request.data,
challenge=co.challenge,
none_attestation_permitted=True,
)
try:
webauthn_credential = webauthn_registration_response.verify()
except RegistrationRejectedException as e:
return Response(
{api_settings.NON_FIELD_ERRORS_KEY: format(e)},
status=status.HTTP_400_BAD_REQUEST,
)
user = User.objects.get(username=request.data["username"])
user_serializer = CustomUserSerializer(user)
co.challenge = ""
co.user = user
co.sign_count = webauthn_credential.sign_count
co.credential_id = webauthn_credential.credential_id.decode()
co.public_key = webauthn_credential.public_key.decode()
co.save()
return Response(user_serializer.data, status=status.HTTP_201_CREATED)
这里还有 SignUpRequesrtView
,我在其中编辑了一些小东西以使其按我想要的方式工作:
class SignupRequestView(APIView):
permission_classes = (AllowAny,)
def post(self, request):
CredentialOptions.objects.filter(username=request.data["username"]).delete()
serializer = WebauthnSignupSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
co = serializer.save()
credential_registration_dict = WebAuthnMakeCredentialOptions(
challenge=co.challenge,
rp_name=settings.DJOSER["WEBAUTHN"]["RP_NAME"],
rp_id=settings.DJOSER["WEBAUTHN"]["RP_ID"],
user_id=co.ukey,
username=co.username,
display_name=co.display_name,
icon_url="",
)
return Response(credential_registration_dict.registration_dict)
我还更新了 WebAuthnSignupSerializer
以检查是否存在具有给定用户名的帐户,如果是,则创建 CredentialOptions
:
class WebauthnSignupSerializer(serializers.ModelSerializer):
class Meta:
model = CredentialOptions
fields = ("username", "display_name")
def create(self, validated_data):
validated_data.update(
{
"challenge": create_challenge(
length=settings.DJOSER["WEBAUTHN"]["CHALLENGE_LENGTH"]
),
"ukey": create_ukey(length=settings.DJOSER["WEBAUTHN"]["UKEY_LENGTH"]),
}
)
return super().create(validated_data)
def validate_username(self, username):
if User.objects.filter(username=username).exists():
return username
else:
raise serializers.ValidationError(f"User {username} does not exist.")```
最佳答案
编辑:长话短说;
@simplewebauthn/browser 将签名编码为 base64url,而 duo-labs/py_webauthn 需要十六进制编码的签名。
嗯,这不是真正的答案,而是一点“帮助”。
您可以使用这个小工具(在页面底部)检查签名是否有效:https://webauthn.passwordless.id/demos/playground.html
至少,使用它,您将知道您的数据是否正确或是否存储有误。从字节到 base64url 的转换如此之多,以至于跟踪起来并不总是那么容易。也许这是数据格式/转换问题?比如不转换为字节,或者不小心将编码双重编码为 base64url。
最后,存储的公钥根据算法有不同的格式。 “原始”或“ASN.1”包装,以防您对 key 本身有疑问。
祝你好运!
编辑:
在深入研究 sunscrapers/djoser 的源代码时,我注意到了一些非常奇怪的事情。虽然所有数据都编码为 base64,但签名似乎是十六进制编码,请参阅他们的 test app
这似乎是因为它使用 duo-labs/py_webauthn 作为需要 hex encoded signature 的依赖项.另一方面,@simplewebauthn/browser lib encodes it into base64url ,就像所有其他数据一样。
关于python - 带有 djoser 的 django 上的 webauthn 签名问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74615858/
Chrome 中提供的虚拟身份验证器扩展 (virtual authenticators tab) 用于在不使用物理身份验证器 key 的情况下测试/调试 FIDO2 Webauthn 身份验证机制。
与显赫demise of the u2f api ,我正在尝试使用 AppId 扩展转移到 WebAuthn API,以支持以前在 U2F 中注册的安全 key 。尽我所能从 reading the
我正在尝试扩展我的应用程序以支持 WebAuthn 登录。到目前为止,我已经在我的本地服务器上成功设置了一个测试应用程序(使用这个 https://github.com/lbuchs/WebAuthn
Webauthn 目前仅在有限数量的设备中受支持 https://caniuse.com/#search=webauthn . 在 JavaScript 中,我希望能够在向用户提供登录或加入表单之前检
Webauthn 目前仅在有限数量的设备中受支持 https://caniuse.com/#search=webauthn . 在 JavaScript 中,我希望能够在向用户提供登录或加入表单之前检
我们有一个带有 PWA 的项目,我们希望在其中实现客户端加密。我们想将 Webauthn 用作与密码相结合的第二个因素。在后台,我们使用随机生成的 key 来加密/解密数据库,该 key 与服务器上的
我正在尝试在我的网站上设置 WebAuthn 身份验证流程,但我遇到了一个问题。我希望我的用户能够在主网站 (www.domain.com) 上注册他们的设备,以便通过他们的用户设置轻松访问。身份验证
我正在尝试实现 webauthn,但无法使签名验证正常工作。根据https://w3c.github.io/webauthn/#verifying-assertion我必须基本上验证以下数据的签名:
我正在测试一个用 go 编写的非常简单的 webauthn 示例,来自 https://github.com/hbolimovsky/webauthn-example当我为主机构建它时,它工作得很好。
我正在测试一个用 go 编写的非常简单的 webauthn 示例,来自 https://github.com/hbolimovsky/webauthn-example当我为主机构建它时,它工作得很好。
我想根据 WebAuthnAPI 在我的混合网络应用程序上实现身份验证. 我现在想做的是,用户也可以在移动设备上通过指纹或 USB 登录。 使用适配器 + USB 手指扫描是否可行,如 this或使用
我已遵循本教程 https://webauthn.guide/#registration 我正在使用 yubico nfc key ,我几乎设法注册了安全 key 。我从服务器发送一个随机字节挑战来注
我不是 Android 开发人员,我一直在做 Android 方面的事情。我希望这里有人可以帮助我。 我正在我的网站上实现 WebAuthn/FIDO2,它在浏览器上运行得非常好。但是当我在我的 an
在最近的 Windows 周年更新中,Edge 现在支持使用 Windows Hello 的生物识别身份验证(参见 https://developer.microsoft.com/en-us/micr
是否可以通过休息工具在本地进行测试。我已经创建了后端来生成用于注册新信用的挑战等,但是如果没有 WebAuthn 响应,如果我创建了正确的方法来消化来自 WebAuthn 的响应对象,我就会不知所措。
我打算使用 WebAuthn 进行身份验证,如演示站点 https://webauthn.io 所示 事实证明,Android 的 WebView(和它的 iOS 对应物)没有实现这一点,并且明确指出
使用 WebAuthN ( https://w3c.github.io/webauthn/ ) 进行身份验证时,是否可以隐藏某些身份验证选项? 例如,在 webauthn.io 上进行测试时,我的 a
在我的用例中,有一个注册页面会触发浏览器特定的 webauthn 流程。例如,在 Mac 上的 Chrome 中,您会看到这一系列的弹出窗口: 在 USB 安全 key 和内置传感器之间选择一个选项
我已经在各种 webauthn 示例上尝试了我的 firefox 62 和 chromium,但我无法使它们中的任何一个工作。那些应该在没有特殊硬件的情况下工作吗?我在 about:config 中激
我正在尝试在我们的登录页面上设置 WebAuthn。我现在需要使用 navigator.credentials.create() 创建公钥。在 Chrome 上,我不断收到以下错误:Uncaught
我是一名优秀的程序员,十分优秀!