.net Core2.2 WebApi реализует авторизацию через OAuth2.0 для входа в систему с помощью WeChat.
Конфигурацию, связанную с WeChat, можно найти в статье на платформе WeChat Public. Обратите внимание, что необходимо правильно изменить домен обратного вызова. Авторизация через веб-страницу WeChat реализуется через механизм OAuth2.0, поэтому мы можем использовать промежуточное ПО, предоставляемое открытым исходным кодом проекта https://github.com/china-live/QQConnect, чтобы реализовать процесс авторизации третьей стороны WeChat.
AspNetCore.Authentication.WeChat
.appsettings.json
и добавьте следующую конфигурацию:"Authentication": {
"WeChat": {
"AppId": "微信AppID",
"AppSecret": "微信AppSecret"
}
},
"Logging": {
"LogLevel": {
"Default": "Debug", //日志级别从低到高,依次为:Debug,Information,Warning,Error,None
"Microsoft.EntityFrameworkCore": "Error",
"System": "Error"
}
}
Startup
: services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddAuthentication()
.AddWeChat(wechatOptions =>
{
wechatOptions.AppId = Configuration["Authentication:WeChat:AppId"];
wechatOptions.AppSecret = Configuration["Authentication:WeChat:AppSecret"];
wechatOptions.UseCachedStateDataFormat = true;
});
AccountController
: [Route("api/[controller]")]
[ApiController]
public class AccountController : ControllerBase
{
private const string LoginProviderKey = "LoginProvider";
private const string Provider_WeChat = "WeChat";
private readonly ILogger _logger;
private readonly IHttpContextAccessor _contextAccessor;
public AccountController(ILogger<AccountController> logger,
IHttpContextAccessor contextAccessor)
{
_logger = logger;
_contextAccessor = contextAccessor;
}
/// <summary>
/// Авторизация через WeChat
/// </summary>
/// <param name="redirectUrl">Адрес перехода после успешной авторизации</param>
/// <returns></returns>
[HttpGet("LoginByWeChat")]
public IActionResult LoginByWeChat(string redirectUrl)
{
var request = _contextAccessor.HttpContext.Request;
var url = $"{request.Scheme}://{request.Host}{request.PathBase}{request.Path}Callback?provider={Provider_WeChat}&redirectUrl={redirectUrl}";
var properties = new AuthenticationProperties { RedirectUri = url };
properties.Items[LoginProviderKey] = Provider_WeChat;
return Challenge(properties, Provider_WeChat);
}
/// <summary>
/// Адрес автоматического обратного вызова после успешной авторизации через WeChat
/// </summary>
/// <param name="provider"></param>
/// <param name="redirectUrl">Адрес перехода после успешной авторизации</param>
/// <returns></returns>
[HttpGet("LoginByWeChatCallback")]
public async Task<IActionResult> LoginByWeChatCallbackAsync(string provider = null, string redirectUrl = "")
{
var authenticateResult = await _contextAccessor.HttpContext.AuthenticateAsync(provider);
if (!authenticateResult.Succeeded) return Redirect(redirectUrl);
var openIdClaim = authenticateResult.Principal.FindFirst(ClaimTypes.NameIdentifier);
if (openIdClaim == null || openIdClaim.Value.IsNullOrWhiteSpace())
return Redirect(redirectUrl);
//TODO 记录 успешной авторизации через WeChat
var city = authenticateResult.Principal.FindFirst("urn:wechat:city")?.Value;
var country = authenticateResult.Principal.FindFirst(ClaimTypes.Country)?.Value;
var headimgurl = authenticateResult.Principal.FindFirst(ClaimTypes.Uri)?.Value;
var nickName = authenticateResult.Principal.FindFirst(ClaimTypes.Name)?.Value;
var openId = authenticateResult.Principal.FindFirst(ClaimTypes.NameIdentifier)?.Value;
var privilege = authenticateResult.Principal.FindFirst("urn:wechat:privilege")?.Value;
var province = authenticateResult.Principal.FindFirst("urn:wechat:province")?.Value;
var sexClaim = authenticateResult.Principal.FindFirst(ClaimTypes.Gender);
int sex = 0; ```
if (sexClaim != null && !sexClaim.Value.IsNullOrWhiteSpace())
sex = int.Parse(sexClaim.Value);
var unionId = authenticateResult.Principal.FindFirst("urn:wechat:unionid")?.Value;
_logger.LogDebug($"WeChat Info=> openId: {openId},nickName: {nickName}");
return Redirect($"{redirectUrl}?openId={openIdClaim.Value}");
}
https://ваш авторизованный домен/api/account/LoginByWeChat?redirectUrl=страница, на которую нужно перейти после успешной авторизации
, чтобы вызвать страницу авторизации через WeChat.Авторизация через WeChat должна осуществляться по протоколу HTTPS.
И открытая платформа WeChat, и публичная платформа WeChat предоставляют интерфейсы для входа через WeChat на веб-сайты. Первая подходит для любых сайтов, а вторая — только для встроенных сайтов в рамках официальных аккаунтов WeChat.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )