将 Piranha CMS 与 Azure AD 集成

Posted

技术标签:

【中文标题】将 Piranha CMS 与 Azure AD 集成【英文标题】:Integrating Piranha CMS with Azure AD 【发布时间】:2019-06-28 02:10:43 【问题描述】:

我正在尝试将 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 对公共网站的用户进行身份验证。

当我尝试访问 ma​​nager 区域时,我无法使用默认用户/密码组合访问它。这是我需要一点帮助的地方。

稍后编辑

为了让两者都能正常工作,我做了以下更改:

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】:

AddPiranhaIdentityWithSeed 方法有两个可选参数用于设置 Identity OptionsCookie Options,但由于您没有提供这些参数,因此该方法设置了默认选项。由于这些可能会干扰您稍后添加的选项,您可能希望覆盖这些设置,请查看此处的文档:

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

此外,为了让用户访问管理器,有一大堆声明指定用户可以执行的操作,您需要将这些声明添加到本地身份用户。你可以在这里阅读它们:

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

最好的问候

哈坎

【讨论】:

嗨哈坎,感谢您的回复。我已经设法使用这两种机制让它工作。我已经将IdentityWithSeed 保留为默认值,并且我更改了 OIDC 协议中的其他位

以上是关于将 Piranha CMS 与 Azure AD 集成的主要内容,如果未能解决你的问题,请参考以下文章

让 Piranha CMS 与 MVC 一起工作

Piranha CMS - UseManager 违反 CORS 政策

基于 JWT 的 API + Piranha CMS 劫持 [Authorize] 路由

Piranha CMS - 自定义块不会保存

现有 MVC 5 站点上的 Piranha CMS

Piranha CMS 自定义实体