Поставщик удостоверений вызовов в коде с библиотекой Microsoft OIDC C#/.NET CoreC#

Место общения программистов C#
Ответить
Anonymous
 Поставщик удостоверений вызовов в коде с библиотекой Microsoft OIDC C#/.NET Core

Сообщение Anonymous »

Я конвертирую веб-сайт в .NET Core и переключаю nuget для авторизации на Microsoft.AspNetCore.Authentication.OpenIdConnect.
Мы используем Azure b2c для обработки входа в систему для пользователей веб-сайта.
Мы также используем CMS Optimizely, поэтому я оставил аутентификацию по умолчанию и добавил свою в качестве дополнительной, чтобы не испортить вход администратора Optimizely, но это (вероятно) не имеет отношения к этому вопросу. p>
Я настроил свою схему аутентификации в файле start.cs и украсил свои контроллеры [Authorize].
Это работает , пользователь отправляется в Azure для входа в систему, когда это необходимо, и я могу получить доступ к HttpContext.User.Claims и HttpContext.User.Identity.IsAuthenticated в коде.
Выход также работает.< /p>
Но мне также нужно реализовать кнопку создания учетной записи и кнопку смены пароля.
Они должны направлять пользователей на несколько разные URL-адреса.
p>
При входе в систему библиотека обрабатывает создание URL-адреса полномочий со свойствами состояния, одноразового номера и многим другим, и, если возможно, я бы хотел избежать этого сам (я доверяю библиотеке больше, чем себе).< /p>
Итак, как я могу отправить пользователя в центр сертификации в коде (без использования атрибута [authorize])?
Startup.cs (соответствующие части):
using Microsoft.IdentityModel.Protocols.OpenIdConnect;

services
.AddAuthentication()
.AddCookie("oidc-cookie", options =>
{
options.LogoutPath = "/";
options.AccessDeniedPath = "/AccessDenied";
})
.AddOpenIdConnect("oidc-scheme", options =>
{
options.SignInScheme = "oidc-cookie";
options.SignOutScheme = "oidc-cookie";
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.CallbackPath = "/signin-oidc";
options.SignedOutCallbackPath = "/signout-oidc";
options.AccessDeniedPath = "/AccessDenied";
options.ClientSecret = SiteSettings.AppSettings.OAuthClientSecret;
options.UsePkce = true;
options.Authority = "https://company.b2clogin.com/company.on ... gnin/v2.0/";
options.ClientId = SiteSettings.AppSettings.OAuthClientID;
options.Scope.Clear();
options.Scope.Add(OpenIdConnectScope.OpenId);
options.Scope.Add(OpenIdConnectScope.OfflineAccess);
options.Scope.Add(options.ClientId);
options.MapInboundClaims = false;
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = ClaimTypes.Role
};

options.Events.OnRedirectToIdentityProvider = ctx =>
{
// Code to att ui_locales url parameter to identity provider call
};
});
.AddSingleton();
.AddSingleton();
.AddAuthorization(options =>
{
options.AddPolicy("AllowEveryonePolicy", policy =>
{
policy.Requirements.Add(new AllowEveryoneRequirement());
});
options.AddPolicy("RequireAzureIdPolicy", policy =>
{
policy.Requirements.Add(new AzureIdRequirement());
});
});

Код контроллера:
[Authorize(AuthenticationSchemes = "oidc-scheme", Policy = "AllowEveryonePolicy")]
public class StartPageController : BasePageController
{
// Controller code
}

Примечания к коду: /AccessDenied определен мной. /signin-oidc и /signout-oidc определяются библиотекой.
URL-адреса для входа, создания учетной записи и изменения паролей:
https://company.b2clogin.com/company.on ... ...&state=...&...
https://company.b2clogin.com/company.on ... ...&state=...&...
https://company.b2clogin.com/company.on ... ...&state=...&...


Подробнее здесь: https://stackoverflow.com/questions/791 ... dc-library
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»