Только некоторые из понятий:
Идентичность - это библиотека, используемая для настройки и управления базой пользователей, такой как регистрация, проверка пароля, сброс пароля и т. Д. Она управляет хранилищем, безопасность и много необходимых проверок.Эта часть, кажется, управляется вашим клиентом.Так что вам это не понадобится.
Файлы cookie / сеанс обычно используются веб-приложениями для отслеживания информации о текущем пользователе.Хотя это возможно использовать с веб-API, на самом деле это не рекомендуется и не делается.
JWT предназначены для установки без сохранения состояния.Веб-API в основном без состояний (REST).Это означает минимальное использование или ОЗУ, а не использование ОЗУ или базы данных для отслеживания состояния (чтобы понять, связан ли предыдущий запрос с текущим).JWT, который принимает ваши пользовательские данные, подписывается секретной строкой, которую вы можете предоставить, и создает подпись .Вы можете прочитать больше о JWT онлайн на таких веб-сайтах, как эти https://jwt.io.
Первым этапом для вас будет подключение к системе клиента для аутентификации.Поскольку вы намереваетесь подключиться к другому API на стороне сервера, вам необходимо использовать функцию AddHttpClient
.NET Core.Во-первых, создайте класс примерно так:
public class MyAuthClient
{
private readonly HttpClient httpClient;
public MyAuthClient(HttpClient httpClient)
{
this.httpClient = httpClient;
}
public Dictionary<string, string> AuthorizeUser(string username, string password)
{
// use the httpClient send login and get confirmation from client's system
if (loginFailed) return null;
else
{
var result = new Dictionary<string, string>();
result["userData1"] = "value"; // get these values from the http request you have created above.
}
}
}
В вашем стартапе добавьте это:
services.AddHttpClient<MyAuthClient>(client => {
client.BaseAddress = new Uri("https://yourclientsystem.com");
});
Теперь, чтобы настроить аутентификацию JWT, есть несколько способов найти его в Интернете.,Я создал библиотеку под названием NetCore.Jwt
, которая может быть весьма полезной в этом контексте.Если вам неудобно использовать его, вы можете либо извлечь его исходный код, либо использовать альтернативный вариант в Интернете.Как только это будет сделано, в файле startup.cs:
Используйте следующее в функции ConfigureServices
:
services.AddAuthentication(NetCoreJwtDefaults.SchemeName).AddNetCoreJwt(options =>
{
options.Secret = "yourVerySecretKeyThatYouWillBeSharingBetweenBothServers";
// you can configure other options here too
});
И следующее в функции Configure
:
app.UseAuthentication();
Приведенный выше код настраивает аутентификацию для ваших приложений с помощью JWT.Убедиться в том, что строка Secret
одинакова в обоих приложениях, очень поможет убедиться, что вы используете один и тот же логин для обоих приложений.Небезопасно иметь такие строки в коде.Проверьте эту ссылку , чтобы понять, как хранить что-либо в безопасном формате.Теперь вам понадобится контроллер и действие, при котором вы берете логин пользователя и предоставляете действительный JWT.Это можно настроить примерно так:
public class AuthController : Controller
{
private readonly MyAuthClient authClient;
public AuthController(MyAuthClient authClient)
{
this.authClient = authClient;
}
public ActionResult<string> Login(string userName, string password)
{
var result = authClient.AuthorizeUser(userName, password);
if (result == null) return BadRequest("invalid login");
var claims = new List<Claim>();
foreach (var r in result)
{
claims.Add(new Claim(r.Key, r.Value));
}
claims.Add(new Claim(ClaimTypes.Name, "usernameHere")); // this can be later accessed using User.Identity.Name
claims.Add(new Claim(ClaimTypes.NameIdentifier, "userId"));
string token = HttpContext.GenerateBearerToken(claims);
return token;
}
}
Наконец, чтобы ваш API можно было только авторизовать и использовать, убедитесь, что вы включили [Authorize]
поверх каждого контроллера.