介绍

灵活的 TOTP我会享受

什么是灵活的 TOTP?

NimbleTOTP 是一个用于双因素身份验证 (2FA) 的小型库,允许开发人员为其应用程序实施基于时间的一次性密码 (TOTP)。

这是两因素身份验证。 (那是什么?NimbleTOTPを楽しむ(Elixir)

究竟什么是双重身份验证?我想知道为什么服务器端和智能手机应用程序的一次性密码匹配。
如果您使用智能手机应用程序(Google Authenticator、Microsoft Authenticator 等)读取二维码,密码将每 30 秒更新一次,您必须在登录时输入。
我知道如何使用它,但它是如何工作的? “我也那么认为。”

我会把细节留给别人,但机制相对简单。
在服务器端创建的秘密嵌入在该二维码中,智能手机应用程序将其保存在设备上。
密码是一种算法,如果您有秘密和时间,就可以推导出来。
换句话说,只要您知道秘密,您就可以创建一个随时间变化的密码。
在服务器端,用户帐户和机密是相关联的。

NimbleTOTPを楽しむ(Elixir)

图是excalidraw我用它画了
这是我最近最喜欢的工具。

我发现在
感觉就像是一位才华横溢的开发人员在白板上乱写乱画。

回归故事。
用法什么时候lib/nimble_totp.ex我想当你看它时,你会以某种方式理解它。
我不完全了解细节,但我想我可以读到密码随着秘密和时间作为参数而变化。
使用图书馆没有任何不便。
它令人惊讶地简短而令人惊讶。

试试看

将身份验证处理与 phx.gen.auth 结合起来——我认为这是直接的方法。
我是一个不正经的人,所以我使用 LiveView 创建了一个类似智能手机应用程序的东西,其中密码会随时更改。

这是它的样子。

NimbleTOTPを楽しむ(Elixir)

为了比较,Microsoft Authenticator 的一次性密码加载了相同的秘密,被移动到了屏幕的底部。
(摇摇晃晃,看着就恶心NimbleTOTPを楽しむ(Elixir)

我尝试使用android的录制功能拍摄Microsoft Authenticator,但它变黑并且没有包含在视频中。所以我用另一台相机以一种原始的方式拍摄。

秘密是一颗红宝石,mdp/rotp样本我用JBSWY3DPEHPK3PXP 用在

凤凰应用新

做一个项目。

mix phx.new hello

编辑mix.exs

混合.exs
-      {:plug_cowboy, "~> 2.5"}
+      {:plug_cowboy, "~> 2.5"},
+      {:nimble_totp, "~> 0.1.0"}

制作源代码。

lib/hello_web/router.ex
     pipe_through :browser
 
     get "/", PageController, :index
+    live "/totp", TotpLive
   end
lib/hello_web/live/totop_live.ex
defmodule HelloWeb.TotpLive do
  use HelloWeb, :live_view

  def render(assigns) do
    ~H"""
    <h1><%= @password %></h1>
    <%= @remain %> s
    """
  end

  def mount(_params, _session, socket) do
    if connected?(socket), do: Process.send_after(self(), :update, 1000)

    {:ok, update_socket(socket)}
  end

  def handle_info(:update, socket) do
    Process.send_after(self(), :update, 1000)
    {:noreply, update_socket(socket)}
  end

  defp update_socket(socket) do
    now_one_time_password = Hello.DummyTotp.verification_code()

    index =
      0..30
      |> Enum.map(&Hello.DummyTotp.verification_code/1)
      |> Enum.find_index(&(&1 != now_one_time_password))

    socket
    |> assign(
      :password,
      String.slice(now_one_time_password, 0..2) <>
        " " <> String.slice(now_one_time_password, 3..5)
    )
    |> assign(:remain, index)
  end
end
lib/hello/dummy_totp.ex
defmodule Hello.DummyTotp do
  @secret Base.decode32!("JBSWY3DPEHPK3PXP")

  def verification_code(offset \ 0) do
    NimbleTOTP.verification_code(@secret, time: System.os_time(:second) + offset)
  end
end

剩下的就是下面的命令了。

cd hello
mix setup
mix phx.server

请不要犹豫,移动它。
剩余 3 秒时,此视频最后一个请看一下并一起唱歌。

直到“1、2、3 dar!”诞生的轨迹这里进行了详细的总结。

综上所述

灵活的 TOTP享受。

$巨大{1, 2, 3 dar! }$


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308630540.html

相关文章:

  • 2021-06-04
  • 2021-06-05
  • 2021-10-17
  • 2021-11-05
  • 2021-08-25
  • 2021-07-27
  • 2021-11-03
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-03-06
相关资源
相似解决方案