.Net?Core實現(xiàn)第三方QQ掃碼登錄
更新時間:2022年02月18日 10:25:57 作者:Run2948
這篇文章介紹了.Net?Core實現(xiàn)第三方QQ掃碼登錄的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
效果展示:

核心實現(xiàn)
展示二維碼
public static (Stream, string) GetLoginQrCode()
{
var uri = new Uri(QrCodeUrl);
var request = new HttpRequestMessage(HttpMethod.Get, uri);
var cookieContainer = new CookieContainer();
var handler = new HttpClientHandler
{
CookieContainer = cookieContainer,
AllowAutoRedirect = true,
UseCookies = true
};
using var client = new HttpClient(handler);
var response = client.Send(request);
var stream = response.Content.ReadAsStreamAsync().Result;
var cookies = cookieContainer.GetCookies(uri).ToList();
var qrsig = cookies.FirstOrDefault(x => x.Name == "qrsig")?.Value;
return (stream, qrsig);
}解析掃碼結果
public static (bool, string, ScanResult) GetQqScanResult(string qrsig)
{
var timeStamp = GetTimeStamp();
var ptqrToken = ParsePtqrToken(qrsig);
var uri = new Uri(string.Format(ScanResultUrl, ptqrToken, timeStamp));
var request = new HttpRequestMessage(HttpMethod.Get, uri);
var cookieContainer = new CookieContainer();
cookieContainer.Add(new Cookie("qrsig", qrsig) { Domain = uri.Host });
var handler = new HttpClientHandler
{
CookieContainer = cookieContainer,
AllowAutoRedirect = true,
UseCookies = true
};
using var client = new HttpClient(handler);
var response = client.Send(request);
var content = response.Content.ReadAsStringAsync().Result;
var result = ParsePtuiCbResult(content);
return result[0] == "0" ? (true, result[4], new ScanResult(ParseQqNumber(result[2]), result[5])) : (false, result[4], null);
}登錄視圖
<h1>QQ Scan Login</h1>
<img src="@Url.Action("QrCode")" width="350" alt="二維碼失效?點擊刷新" onclick="javascript:this.src += '?_t='+ Math.random();" style="cursor: pointer;" />
<h1>QQ Scan Result</h1>
<textarea rows="3" cols="45" id="result"></textarea>
<form asp-action="Login" method="post" id="loginForm">
<input type="hidden" name="nick" id="nickName" />
<input type="hidden" name="number" id="qqNumber" />
</form>登錄授權
配置Cookie認證策略
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
// options.Cookie.HttpOnly = true;
// options.ExpireTimeSpan = TimeSpan.FromHours(2);
// options.SlidingExpiration = true;
options.LoginPath = "/Account/Login";
options.AccessDeniedPath = "/Account/Login";
});不要忘記使用策略: app.UseAuthentication();
創(chuàng)建用戶登錄標識
if (ModelState.IsValid)
{
// 創(chuàng)建用戶登錄標識,Cookie名稱與IServiceCollection中配置的一樣即可
var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);
// 添加之后,可使用User.Identity.Name獲取該值
identity.AddClaim(new Claim(ClaimTypes.Name, model.Nick));
// identity中還可以添加自定義數(shù)據(jù)
identity.AddClaim(new Claim("qq", model.Number));
// var customValue = User.Claims.SingleOrDefault(s => s.Type == "qq").Value;
await HttpContext.SignInAsync(new ClaimsPrincipal(identity));
return Redirect("~/");
}用戶退出登錄
await HttpContext.SignOutAsync();
代碼開源
https://github.com/Run2948/QQScanLogin
到此這篇關于.Net Core實現(xiàn)第三方QQ掃碼登錄的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
菜渣開源一個基于?EMIT?的?AOP?庫(.NET?Core)的方法
CZGL.AOP?是?基于?EMIT?編寫的?一個簡單輕量的AOP框架,支持非侵入式代理,支持.NET?Core/ASP.NET?Core,以及支持多種依賴注入框架,本文介紹菜渣開源一個基于?EMIT?的?AOP?庫(.NET?Core)的相關知識,感興趣的朋友一起看看吧2024-06-06
AJAX使用post發(fā)送數(shù)據(jù)xml格式接受數(shù)據(jù)
AJAX使用post發(fā)送數(shù)據(jù)xml格式接受數(shù)據(jù),需要的朋友可以參考一下2013-03-03
asp.net下利用JS實現(xiàn)對后臺CS代碼的調(diào)用方法
asp.net下利用JS實現(xiàn)對后臺CS代碼的調(diào)用方法...2007-04-04
ASP.NET 根據(jù)漢字獲取漢字拼音的首字母(含多音字)
本文分享了一個函數(shù),這個函數(shù)可以根據(jù)漢字的字符串獲取其拼音的首字母,以便我們在實際開發(fā)中使用。2016-04-04
ASP.NET Core單文件和多文件上傳并保存到服務端的方法
這篇文章主要介紹了ASP.NET Core單文件和多文件上傳并保存到服務端的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04

