第一步,准备工作。获取Client ID和Client Secret

1、自行登陆GitHub官网,点击Setting,如下图:

2、继续,点击Developer settings,如下图:

3、继续,点击Oauth Apps,如下图:

4、继续,点击New Oauth App,如下图:

5、继续,填写完毕后,点击Register application,如下图:

6、至此,我们已经成功拿到Client ID和Client Secret。另外,此页面还可以更改步骤5填写的相关信息,如下图:

第二步,代码部分。实现GitHub第三方登录

1、Login.aspx 代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="GitHubLogin.Login" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body> <form id="form1" runat="server">
<div>
<a href="https://github.com/login/oauth/authorize?client_id=xxxxxxxxxxxxxxxxxxxxxx&state=STATE&redirect_uri=http://www.kudsu.xyz/">github登录</a>
</div>
</form>
</body>
</html>

2、Login.aspx.cs 代码

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace GitHubLogin
{
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string code = Request.QueryString["code"] == null || Request.QueryString["code"].ToString() == "" ? "" : Request.QueryString["code"].ToString();
if (code != "")
{
//第二步,获取token
string tokenJson = LoadURLString("https://github.com/login/oauth/access_token?client_id=xxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxx&code=" + code + "&redirect_uri=http://www.kudsu.xyz/", "post");
JObject jo = (JObject)JsonConvert.DeserializeObject(tokenJson);
tokenJson = jo["access_token"].ToString();
//第三步,获取GitHub用户信息
string userJson = LoadURLString("https://api.github.com/user?access_token=" + tokenJson, "get");
//把GitHub用户信息输出到页面上
Response.Write(userJson);
}
}
}
/// <summary>
/// 请求url
/// </summary>
/// <param name="url">地址</param>
/// <param name="GetPost">post、get</param>
/// <returns></returns>
private string LoadURLString(string url, string GetPost)
{
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create(url);
request1.Method = GetPost;
request1.ContentType = "application/json";
request1.Accept = "application/json";
request1.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
request1.UserAgent = "Mozilla/5.0 (Windows NT 5.2; rv:12.0) Gecko/20100101 Firefox/12.0";
return new StreamReader(((HttpWebResponse)request1.GetResponse()).GetResponseStream(), Encoding.UTF8).ReadToEnd();
}
}
}

3、项目地址:https://github.com/kudsu/GitHubLogin

    亲,如果可以,给个星星~

最新文章

  1. COGS130. [USACO Mar08] 游荡的奶牛[DP]
  2. javascript 高级程序设计 -有感
  3. 定长循环队列C语言实现
  4. CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组(转)
  5. 【HDOJ】4297 One and One Story
  6. istringstream、ostringstream、stringstream 类介绍 .
  7. grep操作
  8. C++ Primer 5th 第6章 函数
  9. HTTP协议4之缓存--转
  10. [转]不用Cookie的“Cookie”技术
  11. spring 4 升级踩雷指南
  12. Excel 日期截取(函数)
  13. Linux利用mysql建立数据库
  14. 1. maven 手动添加jar包
  15. flume 使用手册
  16. 提升HTML5的性能体验系列之五 webview启动速度优化及事件顺序解析
  17. netty答题
  18. ios虚拟机安装(一)
  19. html 优化 简谈
  20. UIview需要知道的一些事情:setNeedsDisplay、setNeedsLayout

热门文章

  1. js中鼠标点击、移动和光标移动的事件触发
  2. 【Offer】[19] 【字符串匹配】
  3. 编写一个函数来找出所有不带歧义的函数名,也就是 那些只在一个模块里出现过的函数名(erlang)
  4. linux常用命令三
  5. Python面向对象编程——继承与派生
  6. Net基础篇_学习笔记_第十二天_面向对象继承(命名空间 、值类型和引用类型)
  7. STL 补档
  8. 使用python合并excel
  9. 关于ClassLoader的使用
  10. POA理论:不要被你的目标欺骗了你