标签: google-authenticator

Python中的Google身份验证器实现

我正在尝试使用可以使用Google身份验证器应用程序生成的一次性密码.

Google身份验证器的功能

基本上,Google身份验证器实现了两种类型的密码:

  • HOTP - 基于HMAC的一次性密码,这意味着密码随每次呼叫而改变,符合RFC4226,并且
  • TOTP - 基于时间的一次性密码,每30秒更改一次(据我所知).

Google身份验证器也可在此处以开源形式提供:code.google.com/p/google-authenticator

目前的代码

我一直在寻找能够生成HOTP和TOTP密码的现有解决方案,但没有找到太多.我的代码是负责生成HOTP的以下代码段:

import hmac, base64, struct, hashlib, time

def get_token(secret, digest_mode=hashlib.sha1, intervals_no=None):
    if intervals_no == None:
        intervals_no = int(time.time()) // 30
    key = base64.b32decode(secret)
    msg = struct.pack(">Q", intervals_no)
    h = hmac.new(key, msg, digest_mode).digest()
    o = ord(h[19]) & 15
    h = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
    return h
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,我使用上述代码生成的密码与使用适用于Android的Google身份验证器应用生成的密码不同.即使我尝试了多个intervals_no值(恰好是前10000个,开头intervals_no = 0),与secretGA应用程序中提供的密钥相等.

我有问题

我的问题是:

  1. 我究竟做错了什么?
  2. 如何在Python中生成HOTP和/或TOTP?
  3. 是否有任何现有的Python库?

总结一下:请给我任何有助于我在Python代码中实现Google身份验证器身份验证的线索.

python security authentication one-time-password google-authenticator

99
推荐指数
2
解决办法
4万
查看次数

是否有关于如何在.NET应用程序中实现Google身份验证器的教程?

我正在寻找有关如何在.NET应用程序中使用Google身份验证器的教程.这是否存在,如果存在,我在哪里可以找到它?

我知道这可以用于为您自己的应用添加双因素身份验证.

.net google-authenticator two-factor-authentication

43
推荐指数
4
解决办法
4万
查看次数

如何为Google身份验证器生成正确显示OTP上方显示的颁发者的QR码?

所以,我知道这里的文档,在这里找到:Google Authenticator密钥URI格式

当我从该页面关注此示例时:

otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example
Run Code Online (Sandbox Code Playgroud)

我将它拼接成Google Charts网址,因此:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example
Run Code Online (Sandbox Code Playgroud)

它将显示有效的QR码,如果我在手机上使用我的Google身份验证器应用程序进行扫描,它将开始生成有效的OTP.

但是,在手机的显示屏上,对于QR码创建的条目,我获得了OTP,在其下面,我得到了"示例:alice@google.com".我想要的是在OTP 上方显示"示例" ,在OTP 下方显示"alice@google.com" .我不禁注意到,所有专业制作的应用程序都是这样做的.例如,Google,Wordpress,亚马逊等.公司名称位于OTP 之上,用户名显示在OTP 下方.是的,这纯粹是一个整容问题,但我想做对.

任何人都可以给我一个线索吗?

qr-code google-authenticator

22
推荐指数
3
解决办法
4万
查看次数

我丢失了 2 因素身份验证应用程序,并且无法登录我的 heroku 帐户

我必须将手机恢复出厂设置,并且丢失了我的两步身份验证应用程序(Google Authenticator),现在我无法登录我的 heroku 帐户

heroku google-authenticator two-factor-authentication

17
推荐指数
0
解决办法
6103
查看次数

Google oAuth 2.0 API 身份验证错误:错误 400 -redirect_uri_mismatch(不符合策略)DJANGO APP

我正在尝试让我的谷歌身份验证在请求 Gmail 和日历数据的 Django 应用程序上运行。我已经在 Google 开发者控制台中设置了 oAuth API 并将其与我的项目链接,并且我已经三次检查我的重定向 URI 是否与代码中的完全匹配(HTTP 与 HTTPS 没有错误,斜杠也没有任何不一致) )。我确保我的密钥、密钥、ClientID 和 Client Secret 在 Django 应用程序的管理页面中均已配置且相同。我已经遵循了许多 youtube 教程并搜索了有关堆栈溢出的其他问题,但身份验证仍然无法正常工作。我收到错误 400:redirect_uri_mismatch。尽管我已经检查了很多次以确认它们是相同的。

从所有教程中,我了解到此错误有两个主要根源:

  1. 服务器端(可以在云托管开发者控制台中修复)
  2. 客户端(可以通过更改代码来修复)

这两个错误都有自己的个性化消息,说明不匹配的类型。

然而,我的却是这样说的:您无法登录此应用程序,因为它不符合 Google 的 OAuth 2.0 政策。\n\n如果您是应用开发者,请在 Google Cloud Console 中注册重定向 URI。

这是错误的照片 [![Google 身份验证错误消息][1]][1]


from django.shortcuts import render, redirect
from django.http import HttpRequest
from google_auth_oauthlib.flow import Flow
from google.auth.transport.requests import Request
from googleapiclient.discovery import build
from .models import CredentialsModel
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
import os


os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = …
Run Code Online (Sandbox Code Playgroud)

python django google-authenticator google-oauth google-api-python-client

14
推荐指数
2
解决办法
6万
查看次数

是否可以在服务器上加盐和/或散列HOTP/TOTP密码?

我正在构建一个基于TOTP/HOTP的双因素身份验证系统.为了验证otp,服务器和otp设备必须知道共享密钥.

由于HOTP秘密与用户密码非常相似,我认为应该采用类似的最佳实践.具体而言,强烈建议永远不要存储未加密的密码,只保留密码的盐渍哈希值.

无论是RFC还是HOTP/TOTP的python实现似乎都没有涵盖这方面.

有没有办法使用OTP共享密钥的单向加密,还是一个愚蠢的想法?

python authentication encryption google-authenticator

12
推荐指数
1
解决办法
1968
查看次数

是否有 Google 身份验证器 API

我正在尝试使用谷歌身份验证器创建一个使用双因素身份验证器的网络应用程序,所以我的问题是,是否有用于 google 身份验证器的 api?

google-authenticator

10
推荐指数
2
解决办法
2万
查看次数

使用PHP的Google身份验证器

我使用https://github.com/chregu/GoogleAuthenticator.php为我正在处理的Web应用程序构建了双因素身份验证.一切都有效,甚至代码都有效.现在我在不同的服务器中设置相同的代码并生成新的密钥并将其添加到谷歌身份验证器移动应用程序现在移动中生成的代码不匹配.

我通过比较两个服务器上的结果并注意到time()函数返回不同的时间(1小时差异),然后我强迫我的第二个服务器(谷歌代码没有工作)与第一个相同的时间,它工作.所以我真的很困惑这是某种时区问题吗?因为我真的需要这些服务器拥有自己的时区.

有什么工作吗?

我还跟着https://support.google.com/accounts/answer/185834?hl=en并同步了我的google身份验证器应用仍然无法正常工作.移动应用程序中生成的代码在一小时后在我的第二台服务器上运行.任何人都可以帮助我或建议我一个不同的方法.

这是我用来连接上面的库的代码

class googleAuthLibrary extends GoogleAuthenticator
{
    public function getSecretKey()
    {
        $secretKey = $this->generateSecret();

        return $secretKey;
    }

    public function getQRLink($username, $hostname, $secretKey)
    {
        $url = 'https://chart.googleapis.com/chart?cht=qr&chs=300x300&chl=';

        $qrCode = 'otpauth://totp/'.$username.'@'.$hostname.'?secret='.$secretKey;

        $url = $url.$qrCode;

        return $url;
    }

    public function getAuthCode($secretKey)
    {
        $authCode =$this->getCode($secretKey);

        return $authCode;
    }
}
Run Code Online (Sandbox Code Playgroud)

php authentication google-authentication google-authenticator

9
推荐指数
1
解决办法
2万
查看次数

用于Google身份验证器的java API

我想使用Google身份验证器添加双因素身份验证,并想知道谷歌是否提供了java api.我试着寻找它,但没有找到任何.任何人都可以指向我的java api,如果有的话.如果不是,我如何在我的基于Web的Java应用程序中使用Google身份验证器.我在我现有的应用程序中使用Spring框架

java api authenticator google-authenticator

8
推荐指数
2
解决办法
2万
查看次数

Android Google Auth登录handleSignInResult:false

我正在开发我尝试使用Google登录的应用程序.但getExtrasdata始终返回null.

这是我从日志中得到的:

getSignInIntent = { act=com.google.android.gms.auth.GOOGLE_SIGN_IN cmp=com.rbsoftware.pfm.personalfinancemanager/com.google.android.gms.auth.api.signin.internal.SignInHubActivity (has extras) }

mGoogleApiClient=com.google.android.gms.internal.zzmg@1f595441

handleSignInResult:false

result=com.google.android.gms.auth.api.signin.GoogleSignInResult@7d8c188

data=Intent { (has extras) }

getExtrasdata=Bundle[{googleSignInStatus=Status{statusCode=INTERNAL_ERROR, resolution=null}}]
Run Code Online (Sandbox Code Playgroud)

在Developer Console中一切都应该没问题.

你能帮我修一下这个问题吗?

package com.rbsoftware.pfm.personalfinancemanager;


import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.OptionalPendingResult;
import com.google.android.gms.common.api.ResultCallback;


public class LoginActivity extends AppCompatActivity implements
        GoogleApiClient.OnConnectionFailedListener,
        View.OnClickListener {
    private static final String TAG = "SignInActivity";
    private static final int RC_SIGN_IN = 9001; …
Run Code Online (Sandbox Code Playgroud)

android google-api google-authenticator google-plus google-signin

8
推荐指数
1
解决办法
6908
查看次数