明天就要在西子湖畔,参加 RubyChina 大会了。 猛然发现,自己还从来没在论坛里发过帖,没共享过任何知识。好心虚! 一拍大腿,前一阵不是试过 Google 两步认证吗? 赶紧写一篇使用心得! 奉上 github 示例代码:https://github.com/elizachen/google-authenticator-example 再开个网站演示:https://elizarorlab.herokuapp.com/ 以表达爱莉莎的心意!
Google 两步认证,是 Google 公司提供的,一种增强账户安全性的方式。 它使用 TOTP 算法(基于时间的一次性密码算法)。 借助两步验证,可以为你的网站用户增加一重安全防护。
它包括两个部分:
使用前的准备:
使用步骤: 一般,在关键步骤(比如需要付费),网站要求你输入授权码: 第一步,打开手机应用,查看当前的授权码。
第二步,回到网站,输入授权码,进行验证。
超级简单,有没有!
第一,安全性能大大提高! 如果用户帐户只有密码这道安全防线,密码被盗后,就完了!作恶的人可以尽情狂欢,转钱、高买低卖,好恐怖! 启用两步验证后,即使有坏人破解了您的密码,对于那些要花钱的项目,坏人仍需要借助您的手机,才能继续操作。你的手机也被偷了?纳尼?如果你是苹果用户,赶快通过【查找我的 iPhone】挂失,让 iphone 立马变砖头呀!(不要问我怎么知道的,我的小六 plus 就是被偷的)。 第二,google 不作恶。google 出品,安全可靠。 第三,只要两步,超级简单! 第四,不用花钱。短信验证码,条数超过配额,是要花银子的啊! 第五,更专业!多一道屏障,用户也觉得你靠谱。
作者的技术栈是 RoR, 以 Rails 举例。
1.安装 google-authenticator-rails gem。 在 Gemfile 里添加: gem 'google-authenticator-rails'
2.创建用户数据模型,启用 acts_as_google_authenticated。 $ rails g model user name:string email:string salt:string google_secret:string $ rake db:migrate #app / models / user.rb class User < ActiveRecord::Base acts_as_google_authenticated lookup_token: :salt, drift: 30, issuer: 'eliza''s ROR Lab' before_save {|record| record.salt = SecureRandom.hex unless record.salt } after_create {|record| record.set_google_secret } end
acts_as_google_authenticated:添加必要的验证功能。 drift: 是授权码的有效时限。比如设定为 30,30 秒内的验证码有效。 issuer: 显示发行人,如下图:
3.创建 UserMfaSession 和 UserMfaSessionController
UserMfaSession 是一个处理 MFA session 的 class。
继承自:
GoogleAuthenticatorRails :: Session :: Base
。
# app / models / user_mfa_session.rb
class UserMfaSession < GoogleAuthenticatorRails::Session::Base
# no real code needed here
end
$ rails g controller user_mfa_sessions UserMfaSessionController 是处理 UserMfaSession 的 Controller 类。 # app/controllers / user_mfa_sessions_controller.rb
class UserMfaSessionsController < ApplicationController
skip_before_filter :check_mfa
def new
@user = current_user
end
def create
@user = current_user
if @user.google_authentic?(params[:auth][:mfa_code])
UserMfaSession.create(@user)
redirect_to root_url
else
flash[:error] = "Wrong code"
render :new
end
end
end
4.更改 View 代码:验证授权码是否正确。 #app / views / user_mfa_sessions / new.html.erb
<% if flash[:error] %>
<%= flash[:error] %>
<br />
<% end %>
<img src="<%= @user.google_qr_uri %>">
<br />
<%= form_tag user_mfa_session_path, method: :post do %>
<div class="actions">
<%= text_field :auth, :mfa_code %>
<%= submit_tag 'authenticate' %>
</div>
<% end %>
5.在 ApplicationController 中添加 check_mfa。
class ApplicationController < ActionController::Base
before_filter :check_mfa
def current_user
@current_user = User.find_or_create_by(name: 'elizachen', email: '[email protected]')
end
private
def check_mfa
if !(user_mfa_session = UserMfaSession.find) && (user_mfa_session ? user_mfa_session.record == current_user : !user_mfa_session)
redirect_to new_user_mfa_session_url
end
end
end
使用checkmfa
检查 MFA 身份验证是否完成,如果未通过身份验证,则将其重定向到 MFA 身份验证。
6.路由设定 #config / routes.rb
Rails.application.routes.draw do
root 'user_mfa_session#new'
resource :user_mfa_session, only: %i(new create)
end
网址:https://elizarorlab.herokuapp.com/
1.在手机上下载 Google Authenticator 认证程序。
2.通过手机扫描网页端的二维码,绑定你的认证账户。
3.打开手机应用,查看当前的授权码。 4.回到「爱莉莎的 RoR 实验室」https://elizarorlab.herokuapp.com/网站,输入授权码,进行验证。 超级简单,有没有!
是不是很容易呢?
简单、安全、不花钱! Google 两步认证,你的网站,值得拥有!!
示例代码也准备好了,在爱莉莎的 github: https://github.com/elizachen/google-authenticator-example 你不试一试吗?
欢迎留言,欢迎关注我的微信公众号【爱莉莎的雪月花】^_^