#asp.net-core #azure-active-directory #single-sign-on #asp.net-core-webapi #microsoft-identity-web
#asp.net-ядро #azure-active-directory #единый вход #asp.net-core-webapi #microsoft-identity-web
Вопрос:
Я работаю над существующим ASP.NET Ядро 3.1 веб-API. Существующая схема аутентификации — JWT. Существует новое требование, согласно которому мы должны поддерживать единый вход с использованием Azure Active Directory.
Итак, я подумал, что стратегия, которой я хочу следовать, заключается в аутентификации пользователя в Microsoft, и когда будет вызван мой обратный вызов URL-адреса входа-oidc, я буду использовать токен от Microsoft для сопоставления с пользователем моего приложения. Затем я создам свой существующий JWT точно так же, как это уже делает приложение, чтобы разрешить дальнейшие действия. Поэтому я хочу пройти аутентификацию в Microsoft, но затем продолжить использовать старую схему авторизации.
И теперь проблема. Насколько я понимаю, URL-адрес входа в oidc — это не то, что вы определяете сами, а скорее скрыто где-то внутри Microsoft.Identity.Web
.
Тем не менее, основываясь на приведенном выше описании, я пришел к выводу, что я должен его определить. Итак, каков правильный способ его реализации? Моя реализация ниже работает, но что-то подсказывает мне, что я упускаю что-то важное для безопасности.
[HttpPost("signin-oidc")]
[AllowAnonymous]
[RequireHttps]
public IActionResult AuthorizeAzureAD([FromForm] OIDCForm form)
{
var jwtHandler = new JwtSecurityTokenHandler();
var token = jwtHandler.ReadJwtToken(form.id_token);
var claims = token.Claims.ToArray();
// Use the nonce claim to make sure that this callback is initiated by me.
var guidClaim = claims.FirstOrDefault(c => c.Type == "nonce");
if (guidClaim == null || !_azureGuids.TryRemove(guidClaim.Value, out string guid))
return Unauthorized();
return Ok(/* return the old JWT to the application for further communication. */);
}
Спасибо.
Ответ №1:
В качестве обходного пути вы можете использовать OpenID connect для единого входа
Вот несколько документов, в которых описывается, как добавить единый вход в опубликованное веб-приложение в Azure с помощью OpenID Connect. Вы можете точно следовать инструкциям и создать их демо-версию, чтобы протестировать ее, или следовать инструкциям внизу, которые показывают, как реализовать единый вход в вашем собственном приложении.
https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect
Для получения более подробной информации обратитесь к этим документам:
1) https://midnightprogrammer.net/post/single-sign-on-in-aspnet-core-with-azure-active-directory /
2) https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-aspnet-core-webapp
Комментарии:
1. Спасибо. Я видел это, но они сильно отличаются от моего сценария.
2. любое решение этого … я тоже ищу ту же проблему