将 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 对公共网站的用户进行身份验证。
当我尝试访问 manager 区域时,我无法使用默认用户/密码组合访问它。这是我需要一点帮助的地方。
稍后编辑:
为了让两者都能正常工作,我做了以下更改:
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 Options 和 Cookie Options,但由于您没有提供这些参数,因此该方法设置了默认选项。由于这些可能会干扰您稍后添加的选项,您可能希望覆盖这些设置,请查看此处的文档:
http://piranhacms.org/docs/components/authentication/identity-security
此外,为了让用户访问管理器,有一大堆声明指定用户可以执行的操作,您需要将这些声明添加到本地身份用户。你可以在这里阅读它们:
http://piranhacms.org/docs/components/authentication
最好的问候
哈坎
【讨论】:
嗨哈坎,感谢您的回复。我已经设法使用这两种机制让它工作。我已经将IdentityWithSeed
保留为默认值,并且我更改了 OIDC 协议中的其他位以上是关于将 Piranha CMS 与 Azure AD 集成的主要内容,如果未能解决你的问题,请参考以下文章
Piranha CMS - UseManager 违反 CORS 政策