关于百度oauth2.0登陆的诸多问题

Posted 个人文章和个人观点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于百度oauth2.0登陆的诸多问题相关的知识,希望对你有一定的参考价值。

众所周知(至少对于用百度作为第三方平台的人是的),百度账号登陆是真的很容易申请到一个id,但是,他有一个问题,就是:


很容易出错


我做这个东西的时候,至少弄出了不下十个错误。现在,我就告诉大家这些问题如何解决
1、百度开发者管理中心怎么进
回答:不要指望在百度上能直接找到连接,你只能点击下方链接进入,也不要指望在百度开发者中心主页进入,更不要指望着自己乱猜网址。
连接:http://developer.baidu.com/console#app/project点击此处跳转

(你要是乱打网址进去了,那么:欧皇,请受我一拜!
2、怎么创建应用

点击创建工程(若按钮被百度隐藏,请点击此处或复制下方链接http://developer.baidu.com/console#app/create)

关于百度oauth2.0登陆的诸多问题

按提示填写相关信息
至此,创建工程就可以了

3、怎么登陆
这个问题可算是折腾我半天了。
1、初始设置

点击你要进入的工程

按图示填写信息,然后点击保存

====================
至此,你已经搞定了后台工作

====================
废话不多说,php代码直接上
1、注册(我是在注册时强制绑定百度账号的,但是如果你只是想作为一种第三方登陆工具,也可以参考,你可以只看获取code和access_token的部分

<?php
//常量设置header("charset=utf-8");
//连接数据库 $con = mysql_connect("localhost","这里填账号",这里填密码); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("sfydb_6273437", $con);
//这说明是传回了codeif($_GET['code']!=""){
//判断是否已注册 $result = mysql_query("SELECT * FROM userlist where Userid = '".$_GET['Userid']."'"); $count=mysql_num_rows($result); if($count!=0) { die("这个账号已经被注册过了"); } //获取token $url="https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=".$_GET['code']."&client_id=BIPCjdmpveslLNrKovbStQ3t&client_secret=我当然不会告诉你secret是多少&redirect_uri=http://sscczzjj.top?Userid=".$_GET['Userid']."%26Password=".str_replace("=","%253D",$_GET['Password']); $html = file_get_contents($url); $TokenText = json_decode($html, true);
//获取失败 if($TokenText["error"]!="") { die($TokenText["error_description"]); }
//读取资料 $url="https://openapi.baidu.com/rest/2.0/passport/users/getLoggedInUser?access_token=".$TokenText['access_token']; $html = file_get_contents($url); $InfoText = json_decode($html, true); //判断此id是否已注册 $result = mysql_query("SELECT * FROM userlist where Baiduuid = '".$InfoText['openid']."'"); $count=mysql_num_rows($result); if($count!=0) { die("此百度id已注册过一个账号"); }
//获取失败 if($InfoText["error_msg"]!="") { die($InfoText["error_msg"]); }
//写数据库 mysql_query("INSERT INTO userlist (Userid, Password, AccessToken, UserName, Baiduuid, Cookie, RefershToken) VALUES ('".$Userid."', '".$Password."', '".$TokenText['access_token']."', '".$InfoText['uname']."', '".$InfoText['openid']."', '".$Cookie."', '".$TokenText['refresh_token']."')"); //返回成功 die("注册成功,请选择登陆操作进行登陆");}
//表明是由客户端发起注册请求if($_GET['firstinto']!=""){ //判断是否已注册 $result = mysql_query("SELECT * FROM userlist where Userid = '".$_GET['Userid']."'"); $count=mysql_num_rows($result); if($count!=0) { die("这个账号已经被注册过了"); }
//获取code $url="https://openapi.baidu.com/oauth/2.0/authorize?response_type=code&confirm_login=1&client_id=BIPCjdmpveslLNrKovbStQ3t&redirect_uri=http://sscczzjj.top?Userid=".$_GET['Userid']."%26Password=".str_replace("=","%253D",$_GET['Password']); Header("Location:$url");}


//加密function encryptForDotNet($input, $key){ $iv = $key; $addnum = 8 - ( strlen($input) % 8 ); for ($i = 0; $i < $addnum; $i++) { $input .= chr($addnum); } $output = mcrypt_encrypt(MCRYPT_DES, $key, $input, MCRYPT_MODE_CBC, $iv); return base64_encode($output);}//解密function decryptForDotNet($input, $key){ $iv = $key; $output = base64_decode($input); $output = mcrypt_decrypt(MCRYPT_DES, $key, $output, MCRYPT_MODE_CBC, $iv); for ($i = 0; $i <= 8; $i++) { $output = str_replace(chr($i), "", $output); } return $output;}?>

2、登陆

<?php
//常量设置$con = mysql_connect("localhost","这里填写账号",这里填写密码);if (!$con){ die('Could not connect: ' . mysql_error());}mysql_select_db("sfydb_6273437", $con);Login();
//主函数function Login(){ $Password=decryptForDotNet($_GET['Password'],"AA"); $Userid=$_GET['Userid']; $result = mysql_query("SELECT * FROM userlist where Userid = '".$Userid."'"); $count=mysql_num_rows($result); if($count==0) { die("NoUser"); } $row = mysql_fetch_array($result); if($row['Password']!=$_GET['Password']) { die("WrongPassword"); } if($row['BaiduUid']=="") { die("NoToken.PleaseUseRegister"); }
//生成Cookie $Cookie = ''; for ($i=1;$i<=1024;$i++) { $randstr = chr(rand(97,122)); $Cookie .= $randstr; } $Cookie =encryptForDotNet($Cookie,"t68[]a*G"); mysql_query("UPDATE userlist SET Cookie = '.$Cookie.' WHERE Userid='".$Userid."'"); die("=".$Cookie);}//加密function encryptForDotNet($input, $key){ $iv = $key; $addnum = 8 - ( strlen($input) % 8 ); for ($i = 0; $i < $addnum; $i++) { $input .= chr($addnum); } $output = mcrypt_encrypt(MCRYPT_DES, $key, $input, MCRYPT_MODE_CBC, $iv); return base64_encode($output);}//解密function decryptForDotNet($input, $key){ $iv = $key; $output = base64_decode($input); $output = mcrypt_decrypt(MCRYPT_DES, $key, $output, MCRYPT_MODE_CBC, $iv); for ($i = 0; $i <= 8; $i++) { $output = str_replace(chr($i), "", $output); } return $output;}?>

至此,后端搞定

废话还是不多说,再来个前端VBNET代码

1、代码


Imports System.Security.CryptographyImports System.TextImports System.IO
Public Class Login Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged If CheckBox1.Checked = True Then TextBox1.PasswordChar = "" TextBox2.PasswordChar = "" Else TextBox1.PasswordChar = "*" TextBox2.PasswordChar = "*" End If End Sub
Private Sub RadioButton1_Click(sender As Object, e As EventArgs) Handles RadioButton1.Click TextBox1.Enabled = False GroupBox2.Enabled = False TextBox1.Text = "" End Sub
Private Sub RadioButton2_Click(sender As Object, e As EventArgs) Handles RadioButton2.Click TextBox1.Enabled = True End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim LoginResult1 As String = "" If RadioButton1.Checked = True Then LoginResult1 = CookieCenter.Password_Sign_in(TextBox3.Text, TextBox2.Text) If LoginResult1 <> "OK" Then MsgBox(LoginResult1, MsgBoxStyle.Exclamation, "Error") End If Else If TextBox1.Text <> TextBox2.Text Then MsgBox("DifferentPassword", MsgBoxStyle.Exclamation, "Error") Return End If If CookieCenter.CheckUnallowedChar(TextBox3.Text) = False OrElse CookieCenter.CheckUnallowedChar(TextBox2.Text) = False Then MsgBox("IncludesUnecpectedChar", MsgBoxStyle.Exclamation, "Error") Return End If If TextBox3.Text.Length > 20 OrElse TextBox2.Text.Length > 20 Then MsgBox("UserOrPasswordToLong", MsgBoxStyle.Exclamation, "Error") Return End If If TextBox3.Text.Length < 4 OrElse TextBox2.Text.Length < 6 Then MsgBox("UserOrPasswordToShort", MsgBoxStyle.Exclamation, "Error") Return End If GroupBox2.Enabled = True TextBox4.Text = "Http://sscczzjj.top/?firstinto=abc&Userid=" + TextBox3.Text + "&Password=" + SecurityCenter.EncriptStr(TextBox2.Text, "AA").Replace("=", "%3D") WebBrowser1.Url = New Uri("Http://sscczzjj.top/?firstinto=abc&Userid=" + TextBox3.Text + "&Password=" + SecurityCenter.EncriptStr(TextBox2.Text, "AA").Replace("=", "%3D")) 'LoginResult1 = CookieCenter.Sign_up(TextBox3.Text, TextBox2.Text) End If End SubEnd Class

Public Class SecurityCenter '与php配套的加解密
Public Shared Function EncriptStr(ByVal input As String, ByVal password As String, ByVal Optional encoding As Encoding = Nothing) As String encoding = If(encoding, Encoding.[Default]) Dim iv = encoding.GetBytes(password) Dim key = encoding.GetBytes(password) Dim datas = encoding.GetBytes(input) Dim desCryptoServiceProvider = New DESCryptoServiceProvider() Using memoryStream = New MemoryStream() Using cryptoStream = New CryptoStream(memoryStream, desCryptoServiceProvider.CreateEncryptor(iv, key), CryptoStreamMode.Write) cryptoStream.Write(datas, 0, datas.Length) cryptoStream.FlushFinalBlock() Return Convert.ToBase64String(memoryStream.ToArray()) End Using End Using End Function
Public Shared Function DecriptStr(ByVal input As String, ByVal password As String, ByVal Optional encoding As Encoding = Nothing) As String encoding = If(encoding, Encoding.[Default]) Dim iv = encoding.GetBytes(password) Dim key = encoding.GetBytes(password) Dim datas = Convert.FromBase64String(input) Dim desCryptoServiceProvider = New DESCryptoServiceProvider() Using memoryStream = New MemoryStream() Using cryptoStream = New CryptoStream(memoryStream, desCryptoServiceProvider.CreateDecryptor(iv, key), CryptoStreamMode.Write) cryptoStream.Write(datas, 0, datas.Length) cryptoStream.FlushFinalBlock() Return encoding.GetString(memoryStream.ToArray()) End Using End Using End FunctionEnd Class
Public Class HttpRequestions Public Shared Function POST(ByVal URL$, ByVal data$) Dim http On Error Resume Next http = CreateObject("WinHttp.WinHttpRequest.5.1") With http .Open("POST", URL, True) .Send(data) '发送请求 .WaitForResponse() '一直等待到有回应再继续 End With Dim request = http.responseText '此处用于储存返回的数据包 http = Nothing '清理掉旧的http请求信息防止二次调用时裂开 Return request '返回数据包 End Function
Public Shared Function GET1(ByVal URL$) Dim http On Error Resume Next http = CreateObject("WinHttp.WinHttpRequest.5.1") With http .Open("GET1", URL, True) .Send() '发送请求 .WaitForResponse() '一直等待到有回应再继续 End With Dim request = http.responseText '此处用于储存返回的数据包 http = Nothing '清理掉旧的http请求信息防止二次调用时裂开 Return request '返回数据包 End FunctionEnd Class
Public Class CookieCenter
Public Cookie1 As String = "" 'Public Key As String = "gYt6&^a;" Public EPassword As String = ""
Public Shared Function Password_Sign_in(ByVal User As String, ByVal Password As String) As String If CheckUnallowedChar(User) = False OrElse CheckUnallowedChar(Password) = False Then Return "IncludesUnecpectedChar" End If If User.Length > 20 OrElse Password.Length > 20 Then Return "UserOrPasswordToLong" End If If User.Length < 4 OrElse Password.Length < 6 Then Return "UserOrPasswordToShort" End If Dim result As String = "" result = HttpRequestions.POST("Http://sscczzjj.top/PasswordLogin.php?Userid=" + User + "&Password=" + SecurityCenter.EncriptStr(Password, "AAA"), "") If result.StartsWith("=") = True Then My.Settings("Cookie") = result.Replace("=", "") Return "OK" Else MsgBox(result, MsgBoxStyle.Exclamation, "Error") Return "Failed" End If End Function
Public Shared Function CheckUnallowedChar(ByVal CheckStringed As String) As Boolean For i = 32 To 47 If CheckStringed.Replace(ChrW(i), "") <> CheckStringed Then Return False End If Next For i = 58 To 63 If CheckStringed.Replace(ChrW(i), "") <> CheckStringed Then Return False End If Next For i = 91 To 96 If CheckStringed.Replace(ChrW(i), "") <> CheckStringed Then Return False End If Next For i = 123 To 127 If CheckStringed.Replace(ChrW(i), "") <> CheckStringed Then Return False End If Next Return True End FunctionEnd Class

2、设计器代码

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _Partial Class Login Inherits System.Windows.Forms.Form
'Form 重写 Dispose,以清理组件列表。 <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then components.Dispose() End If Finally MyBase.Dispose(disposing) End Try End Sub
'Windows 窗体设计器所必需的 Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的 '可以使用 Windows 窗体设计器修改它。 '不要使用代码编辑器修改它。 <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.WebBrowser1 = New System.Windows.Forms.WebBrowser() Me.TabControl1 = New System.Windows.Forms.TabControl() Me.LAR = New System.Windows.Forms.TabPage() Me.GroupBox2 = New System.Windows.Forms.GroupBox() Me.GroupBox1 = New System.Windows.Forms.GroupBox() Me.TextBox4 = New System.Windows.Forms.TextBox() Me.Label6 = New System.Windows.Forms.Label() Me.Label4 = New System.Windows.Forms.Label() Me.Button1 = New System.Windows.Forms.Button() Me.CheckBox1 = New System.Windows.Forms.CheckBox() Me.RadioButton2 = New System.Windows.Forms.RadioButton() Me.RadioButton1 = New System.Windows.Forms.RadioButton() Me.Label5 = New System.Windows.Forms.Label() Me.TextBox3 = New System.Windows.Forms.TextBox() Me.TextBox2 = New System.Windows.Forms.TextBox() Me.TextBox1 = New System.Windows.Forms.TextBox() Me.Label3 = New System.Windows.Forms.Label() Me.Label2 = New System.Windows.Forms.Label() Me.Label1 = New System.Windows.Forms.Label() Me.TabControl1.SuspendLayout() Me.LAR.SuspendLayout() Me.GroupBox2.SuspendLayout() Me.GroupBox1.SuspendLayout() Me.SuspendLayout() ' 'WebBrowser1 ' Me.WebBrowser1.Dock = System.Windows.Forms.DockStyle.Fill Me.WebBrowser1.Location = New System.Drawing.Point(3, 17) Me.WebBrowser1.MinimumSize = New System.Drawing.Size(20, 20) Me.WebBrowser1.Name = "WebBrowser1" Me.WebBrowser1.Size = New System.Drawing.Size(500, 464) Me.WebBrowser1.TabIndex = 0 Me.WebBrowser1.Url = New System.Uri("", System.UriKind.Relative) ' 'TabControl1 ' Me.TabControl1.Appearance = System.Windows.Forms.TabAppearance.Buttons Me.TabControl1.Controls.Add(Me.LAR) Me.TabControl1.Dock = System.Windows.Forms.DockStyle.Fill Me.TabControl1.ItemSize = New System.Drawing.Size(150, 21) Me.TabControl1.Location = New System.Drawing.Point(0, 0) Me.TabControl1.Name = "TabControl1" Me.TabControl1.SelectedIndex = 0 Me.TabControl1.Size = New System.Drawing.Size(862, 521) Me.TabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed Me.TabControl1.TabIndex = 1 ' 'LAR ' Me.LAR.AutoScroll = True Me.LAR.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle Me.LAR.Controls.Add(Me.GroupBox2) Me.LAR.Controls.Add(Me.GroupBox1) Me.LAR.Location = New System.Drawing.Point(4, 25) Me.LAR.Name = "LAR" Me.LAR.Padding = New System.Windows.Forms.Padding(3) Me.LAR.Size = New System.Drawing.Size(854, 492) Me.LAR.TabIndex = 0 Me.LAR.Text = "Login And Register" Me.LAR.UseVisualStyleBackColor = True ' 'GroupBox2 ' Me.GroupBox2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink Me.GroupBox2.Controls.Add(Me.WebBrowser1) Me.GroupBox2.Dock = System.Windows.Forms.DockStyle.Right Me.GroupBox2.Enabled = False Me.GroupBox2.Location = New System.Drawing.Point(343, 3) Me.GroupBox2.Name = "GroupBox2" Me.GroupBox2.Size = New System.Drawing.Size(506, 484) Me.GroupBox2.TabIndex = 3 Me.GroupBox2.TabStop = False Me.GroupBox2.Text = "未授权用户可以在这里授权" ' 'GroupBox1 ' Me.GroupBox1.Controls.Add(Me.TextBox4) Me.GroupBox1.Controls.Add(Me.Label6) Me.GroupBox1.Controls.Add(Me.Label4) Me.GroupBox1.Controls.Add(Me.Button1) Me.GroupBox1.Controls.Add(Me.CheckBox1) Me.GroupBox1.Controls.Add(Me.RadioButton2) Me.GroupBox1.Controls.Add(Me.RadioButton1) Me.GroupBox1.Controls.Add(Me.Label5) Me.GroupBox1.Controls.Add(Me.TextBox3) Me.GroupBox1.Controls.Add(Me.TextBox2) Me.GroupBox1.Controls.Add(Me.TextBox1) Me.GroupBox1.Controls.Add(Me.Label3) Me.GroupBox1.Controls.Add(Me.Label2) Me.GroupBox1.Controls.Add(Me.Label1) Me.GroupBox1.Dock = System.Windows.Forms.DockStyle.Left Me.GroupBox1.Location = New System.Drawing.Point(3, 3) Me.GroupBox1.Name = "GroupBox1" Me.GroupBox1.Size = New System.Drawing.Size(334, 484) Me.GroupBox1.TabIndex = 2 Me.GroupBox1.TabStop = False Me.GroupBox1.Text = "登陆" ' 'TextBox4 ' Me.TextBox4.Location = New System.Drawing.Point(77, 207) Me.TextBox4.Name = "TextBox4" Me.TextBox4.ReadOnly = True Me.TextBox4.Size = New System.Drawing.Size(248, 21) Me.TextBox4.TabIndex = 13 ' 'Label6 ' Me.Label6.AutoSize = True Me.Label6.Location = New System.Drawing.Point(18, 210) Me.Label6.Name = "Label6" Me.Label6.Size = New System.Drawing.Size(53, 12) Me.Label6.TabIndex = 12 Me.Label6.Text = "你的链接" ' 'Label4 ' Me.Label4.AutoSize = True Me.Label4.Location = New System.Drawing.Point(18, 131) Me.Label4.Name = "Label4" Me.Label4.Size = New System.Drawing.Size(299, 72) Me.Label4.TabIndex = 1 Me.Label4.Text = "1、为了防止某些别有用心的人随意注册账号,注册需要" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "与百度账号绑定,输入完密码之后您可以获得激活链" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "接,您可以复制链接后在浏览器打开以完成验证,也" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "可以在右" & "侧的窗口中登陆百度账号验证" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "2、链接中包含密码的密文,请勿外泄" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "3、在授权成功之前,此账号仍可被其他用户注册" ' 'Button1 ' Me.Button1.Location = New System.Drawing.Point(250, 99) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(75, 23) Me.Button1.TabIndex = 11 Me.Button1.Text = "执行" Me.Button1.UseVisualStyleBackColor = True ' 'CheckBox1 ' Me.CheckBox1.AutoSize = True Me.CheckBox1.Location = New System.Drawing.Point(172, 102) Me.CheckBox1.Name = "CheckBox1" Me.CheckBox1.Size = New System.Drawing.Size(72, 16) Me.CheckBox1.TabIndex = 10 Me.CheckBox1.Text = "显示密码" Me.CheckBox1.UseVisualStyleBackColor = True ' 'RadioButton2 ' Me.RadioButton2.AutoSize = True Me.RadioButton2.Location = New System.Drawing.Point(119, 102) Me.RadioButton2.Name = "RadioButton2" Me.RadioButton2.Size = New System.Drawing.Size(47, 16) Me.RadioButton2.TabIndex = 9 Me.RadioButton2.TabStop = True Me.RadioButton2.Text = "注册" Me.RadioButton2.UseVisualStyleBackColor = True ' 'RadioButton1 ' Me.RadioButton1.AutoSize = True Me.RadioButton1.Checked = True Me.RadioButton1.Location = New System.Drawing.Point(66, 102) Me.RadioButton1.Name = "RadioButton1" Me.RadioButton1.Size = New System.Drawing.Size(47, 16) Me.RadioButton1.TabIndex = 8 Me.RadioButton1.TabStop = True Me.RadioButton1.Text = "登陆" Me.RadioButton1.UseVisualStyleBackColor = True ' 'Label5 ' Me.Label5.AutoSize = True Me.Label5.Location = New System.Drawing.Point(30, 104) Me.Label5.Name = "Label5" Me.Label5.Size = New System.Drawing.Size(29, 12) Me.Label5.TabIndex = 7 Me.Label5.Text = "操作" ' 'TextBox3 ' Me.TextBox3.Location = New System.Drawing.Point(65, 18) Me.TextBox3.Name = "TextBox3" Me.TextBox3.Size = New System.Drawing.Size(260, 21) Me.TextBox3.TabIndex = 5 ' 'TextBox2 ' Me.TextBox2.Location = New System.Drawing.Point(65, 45) Me.TextBox2.Name = "TextBox2" Me.TextBox2.PasswordChar = Global.Microsoft.VisualBasic.ChrW(42) Me.TextBox2.Size = New System.Drawing.Size(260, 21) Me.TextBox2.TabIndex = 4 ' 'TextBox1 ' Me.TextBox1.Enabled = False Me.TextBox1.Location = New System.Drawing.Point(65, 72) Me.TextBox1.Name = "TextBox1" Me.TextBox1.PasswordChar = Global.Microsoft.VisualBasic.ChrW(42) Me.TextBox1.Size = New System.Drawing.Size(260, 21) Me.TextBox1.TabIndex = 3 ' 'Label3 ' Me.Label3.AutoSize = True Me.Label3.Location = New System.Drawing.Point(6, 75) Me.Label3.Name = "Label3" Me.Label3.Size = New System.Drawing.Size(53, 12) Me.Label3.TabIndex = 2 Me.Label3.Text = "确认密码" ' 'Label2 ' Me.Label2.AutoSize = True Me.Label2.Location = New System.Drawing.Point(30, 48) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(29, 12) Me.Label2.TabIndex = 1 Me.Label2.Text = "密码" ' 'Label1 ' Me.Label1.AutoSize = True Me.Label1.Location = New System.Drawing.Point(30, 21) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(29, 12) Me.Label1.TabIndex = 0 Me.Label1.Text = "账号" ' 'Login ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(862, 521) Me.Controls.Add(Me.TabControl1) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.MaximizeBox = False Me.Name = "Login" Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Me.Text = "Login" Me.TabControl1.ResumeLayout(False) Me.LAR.ResumeLayout(False) Me.GroupBox2.ResumeLayout(False) Me.GroupBox1.ResumeLayout(False) Me.GroupBox1.PerformLayout() Me.ResumeLayout(False)
End Sub
Friend WithEvents WebBrowser1 As WebBrowser Friend WithEvents TabControl1 As TabControl Friend WithEvents LAR As TabPage Friend WithEvents GroupBox2 As GroupBox Friend WithEvents GroupBox1 As GroupBox Friend WithEvents Button1 As Button Friend WithEvents CheckBox1 As CheckBox Friend WithEvents RadioButton2 As RadioButton Friend WithEvents RadioButton1 As RadioButton Friend WithEvents Label5 As Label Friend WithEvents TextBox3 As TextBox Friend WithEvents TextBox2 As TextBox Friend WithEvents TextBox1 As TextBox Friend WithEvents Label3 As Label Friend WithEvents Label2 As Label Friend WithEvents Label1 As Label Friend WithEvents TextBox4 As TextBox Friend WithEvents Label6 As Label Friend WithEvents Label4 As LabelEnd Class

至此,前端搞定

好啦,现在你可以用百度账号登陆啦

4、根域名相同但是还是redirect_uri错误
回答:别想啦,根域名验证是没用的,只能通过校验回调页来搞

5、为什么没有uid
回答:很简单,百度的文档太久了,实际获得的是openid而不是uid

6、如何获得code
回答:这是通过将code追加在redir_uri之后并重定向到这个uri来实现,所以你需要一个页面来接受这个code

7、redir_uri后面能带参数吗
回答:能,这个百度还是做得到的,他会用&code=xxx的形式追加

8、如何获得code
回答:其实没有百度说的那么复杂,就是将内容直接发回给当前网址,你可以像发送POST或GET请求一样,直接获取返回的json包。但你需要注意,这里的redirect_uri必须和code中的redirect_uri的网址一样(不包括参数),建议直接将获取code与获取token放在一个网址中(我就是这么做的)

9、可以正常获取code,但是得不到token
回答:token中的redirect_uri必须是获取code时填写的uri
例如:在您获取code时输入http://sscczzjj.top/作为redirect_uri,那么在你获取token也要用http://sscczzjj.top作为redirect_uri,而不能用http://sscczzjj.top/1作为uri(即使你将他们都添加到回调uri中)

以上就是全部内容,如果您还有别的疑问,请留言

开发不容易,发文也不容易,独自解决问题也不容易,客官您喜欢就三连一下吧


以上是关于关于百度oauth2.0登陆的诸多问题的主要内容,如果未能解决你的问题,请参考以下文章

spring security oauth2.0 实现

spring security oauth2.0 实现

OAuth2.0第三方登陆总结 | 开发日常

技术干货 | OAuth2.0的安全解析

鉴权与OAuth2.0插件功能介绍

从0开始设计Oauth2.0 - 授权码模式