Интеграция Piranha CMS с Azure AD - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь интегрировать Azure AD для аутентификации с Piranha CMS.

На данный момент это моя конфигурация:

Запуск

public IServiceProvider ConfigureServices(IServiceCollection services) {
    services.AddPiranhaImageSharp();
    services.AddPiranhaEF(options => options.UseMySql(Configuration["ConnectionStrings:DefaultConnection"]));
    services.AddPiranhaIdentityWithSeed<IdentityMySQLDb>(
                options => options.UseMySql(Configuration["ConnectionStrings:DefaultConnection"]));
    services.AddPiranhaManager();

    services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
    }).AddOpenIdConnect(options =>
    {
        options.Authority = "https://login.microsoftonline.com/" + this.TenantId;
        options.ClientId = this.ClientId;
        options.ResponseType = OpenIdConnectResponseType.IdToken;
        options.CallbackPath = "/signin-callback";
        options.SignedOutRedirectUri = "https://localhost:5001/";
        options.SaveTokens = true;
        options.Events.OnTokenValidated = async context => { await TokenValidated(context); };
    }).AddCookie(); 
}

При использовании вышеуказанной конфигурации мне удалось использовать Azure AD для аутентификации пользователей дляобщедоступный веб-сайт.

Когда я пытаюсь получить доступ к области manager , я не могу получить к ней доступ, используя стандартную комбинацию user / pass.Здесь мне понадобится небольшая помощь.

Позже Редактировать :

Чтобы заставить обоих работать, я внес следующие изменения:

services.AddAuthentication(/*specify no options, leave defaults*/)
    .AddOpenIdConnect(options =>
        {
            options.Authority = "https://login.microsoftonline.com/" + this.TenantId;
            options.ClientId = this.ClientId;
            options.ResponseType = OpenIdConnectResponseType.IdToken;
            options.CallbackPath = "/signin-callback";
            options.RemoteSignOutPath = "/signout-oidc";
            options.SignedOutRedirectUri = "https://localhost:5001/";
            options.SignedOutCallbackPath = "/signout-callback";
            options.SignOutScheme = OpenIdConnectDefaults.AuthenticationScheme;
            options.Events.OnTokenValidated = async context => { await TokenValidated(context); };
        })
    .AddCookie(options => options.Cookie.SameSite = SameSiteMode.None);

Затем, когда я пытаюсь войти / выйти из системы, я создал SecurityController следующим образом:

public class SecurityController : Controller
{
    public IActionResult Login()
    {
        return Challenge(new AuthenticationProperties
        {
            RedirectUri = "/about"
        }, OpenIdConnectDefaults.AuthenticationScheme);
    }


    public async Task<IActionResult> Logout()
    {
        await HttpContext.SignOutAsync("Identity.External");

        return Redirect("/");
    }
}

1 Ответ

0 голосов
/ 05 февраля 2019

Метод AddPiranhaIdentityWithSeed имеет два необязательных параметра для установки Параметры идентификации и Параметры cookie , но, поскольку вы их не предоставляете, метод устанавливает параметры по умолчанию.Так как они могут мешать добавлению опций, которые вы добавляете позже, вы можете переопределить эти настройки, взгляните на документы здесь:

http://piranhacms.org/docs/components/authentication/identity-security

Кроме того, для пользователядля доступа к менеджеру есть целая куча утверждений, которые указывают, что пользователь может сделать, что вам нужно добавить к локальному пользователю удостоверения.Вы можете прочитать о них здесь:

http://piranhacms.org/docs/components/authentication

С уважением

Håkan

...