接入GitHubOAuth应用授权-[GitHub一键登录]

  • A+
所属分类:.NetCore

接入GitHubOAuth应用授权-[GitHub一键登录]

第三方登录的原理

所谓第三方登录,实质就是 OAuth 授权。用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份。获取第三方网站的身份数据,就需要 OAuth 授权。

举例来说,A 网站允许 GitHub 登录,背后就是下面的流程。

  1. A 网站让用户跳转到 GitHub。  
  2. GitHub 要求用户登录,然后询问"A 网站要求获得 xx 权限,你是否同意?"  
  3. 用户同意,GitHub 就会重定向回 A 网站,同时发回一个授权码。  
  4. A 网站使用授权码,向 GitHub 请求令牌。  
  5. GitHub 返回令牌.  
  6. A 网站使用令牌,向 GitHub 请求用户数据。  

应用登记

一个应用要求 OAuth 授权,必须先到对方网站登记,让对方知道是谁在请求。

所以,你要先去 GitHub 登记一下。当然,我已经登记过了,你使用我的登记信息也可以,但为了完整走一遍流程,还是建议大家自己登记。这是免费的。

访问https://github.com/settings/applications/new,填写登记表。

提交表单以后,GitHub 应该会返回客户端 ID(client ID)和客户端密钥(client secret),这就是应用的身份识别码。
接入GitHubOAuth应用授权-[GitHub一键登录]

代码示例

用到的接口

  1. 获取code [get]  
  2. https://github.com/login/oauth/authorize?client_id=eb36d61e44aa9a553cc8&redirect_uri=https://localhost:44341/Demo/Test.html  
  3. 获取Token [post]  
  4. https://github.com/login/oauth/access_token?client_id=eb36d61e44aa9a553cc8&client_secret=ecbd5ce648f14f1ef3c8564d325ab3f13dc5bd7d&code=07537a84d12bbae08361  
  5. 获取授权信息 [get]  
  6. https://api.github.com/user?access_token=803c8af0237b8d2ba487250c7f808cbb378fbd0f  

Html代码

  1. <button data-method="GitHubOAuth" class="layui-btn">GitHubOAuth</button>  
  2.   
  3. GitHubOAuth: function () {  
  4.     window.location.href = "https://localhost:44341/GitHubOAuth/Index";  
  5. }  

dotNet代码

  1. public readonly string client_id = "eb36d61e44aa9a553cc8";  
  2. private readonly string client_secret = "ecbd5ce648f14f1ef3c8564d325ab3f13dc5bd7d";  
  3.   
  4. /// <summary>  
  5. /// 重定向用户请求GitHub身份  
  6. /// </summary>  
  7. /// <returns></returns>  
  8. public IActionResult Index()  
  9. {  
  10.     return Redirect($"https://github.com/login/oauth/authorize?client_id={client_id}&redirect_uri=https://localhost:44341/GitHubOAuth/OAuth");  
  11. }  
  12. /// <summary>  
  13. /// OAuth授权信息  
  14. /// </summary>  
  15. /// <param name="code"></param>  
  16. /// <returns></returns>  
  17. public IActionResult OAuth(string code)  
  18. {  
  19.     HttpResult AccessToken = GetAccessToken(code);  
  20.     HttpHelper http = new HttpHelper();  
  21.     HttpItem item = new HttpItem()  
  22.     {  
  23.         URL = $"https://api.github.com/user?{AccessToken.Html.Trim()}",  
  24.         Method = "get"  
  25.     };  
  26.     HttpResult result = http.GetHtml(item);  
  27.     return Content(result.Html);  
  28. }  
  29. /// <summary>  
  30. /// 获取AccessToken  
  31. /// </summary>  
  32. /// <param name="code"></param>  
  33. /// <returns></returns>  
  34. public HttpResult GetAccessToken(string code) {  
  35.     HttpHelper http = new HttpHelper();  
  36.     HttpItem item = new HttpItem() {   
  37.     URL= $"https://github.com/login/oauth/access_token?client_id={client_id}&client_secret={client_secret}&code={code}",  
  38.     Method="post"  
  39.     };  
  40.     HttpResult result = http.GetHtml(item);  
  41.     return result;  
  42. }  

效果预览

接入GitHubOAuth应用授权-[GitHub一键登录]

现在我们就拿到了用户信息 可以自己进行扩展应用了

参考资料

官方文档:
https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#directing-users-to-review-their-access

钰玺

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: