[sitecore][secure][login]簡単なセキュアーセクションの設定

概要:簡単なセキュアーセクションの設定をする手順です。


この前、お客からセクション別にログイン使ってアクセスできないか言われました。既存のサイトコアのextranetユーザーで管理しでもいいと言ったので、そのメモ書きを書きます。

まず、テストのセクションを作成しましょう。

20141009_01

例えば、人事と開発とあります。人事セクションのコンテンツは人事部の関連者のみアクセスができ、開発部のコンテンツは開発部の方のみアクセスができます。ディフォルトの設定では、だれでもこれらのページへのアクセスが可能です。

20141009_02

次に、それぞれの関係者のログインを作成しましょう。

20141009_0320141009_04

さて、それぞれのセクションにてアクセス権限を設定しましょう。

20141009_05

開発のセクションは開発のログインはのみアクセス許可します。

20141009_06

20141009_07

extranet\Anonymous のアクセスを停止します。

20141009_08

アクセス権限の設定の後、ログインページを作成ししましょう。

20141009_09

ユーザーログインのサブレイアウトを追加します。ページーへ追加します

 20141009_10

20141009_11

ここからサンプルのログイン画面を取得。ログインページへ行くと、こんな感じです。

local.sandbox.com/SecuredーSection/LoginPage

20141009_12

さて、ログイン画面を設定のあと、開発のページへ行くと、許可がない画面になります。

local.sandbox.com/Secured Section/dev/DEV

20141009_13

URLをみれば、サイトコアはアクセスの許可がない際にnoaccess.aspxにリダイレクトされます。 このページを先ほど作成したログインページへ指定すればいい。

この設定はWeb.configになるNoAccessUrlにて設定します。

20141009_14

Web.config
  <!--  ACCESS DENIED HANDLER
        Url of page handling 'Acess denied' errors
   -->
  <setting name="NoAccessUrl" value="/Secured Section/LoginPage.aspx" />

さて、ログイン画面を設定のあと、ログイン画面が表示され、開発のログインで登録すれば、ページが開発の関係者のみアクセスができます。

20141009_15

このメモ書きに使用したコードです:

UserLogin.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserLogin.ascx.cs" Inherits="local.sandbox.com.Website.layouts.Sandbox.UserLogin" %>
    
<div id="login">
    <h2>
        <span class="fontawesome-lock">
            ログイン
        </span>
    </h2>
    <form action="javascript:void(0);" method="POST">
        <fieldset>
            <p><label for="email">ユーザー名</label></p>
            <p>
                <asp:TextBox ID="txtUserName" runat="server" />
            </p> 
            <p><label for="password">パスワード</label></p>
            <p>
                <asp:TextBox ID="txtPassword" runat="server" textmode="password" />
            </p>
            <asp:Panel ID="pnlError" runat="server" Visible="false" >
                 <p>
                    <span style="color:#FF0000">
                        <i>*無効なユーザー名またはパスワード。</i>
                    </span>
                 </p>
            </asp:Panel>
            <asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="[OK]"  />
        </fieldset>
    </form>
</div>

 

UserLogin.ascx.cs

namespace local.sandbox.com.Website.layouts.Sandbox
{
    #region

    using System;
    using System.Security.Authentication;
    using System.Web.UI;

    using Sitecore.Links;
    using Sitecore.Security.Authentication;
    using Sitecore.SecurityModel;
    using Sitecore.Web;

    #endregion

    /// <summary>
    ///     The user login.
    /// </summary>
    public partial class UserLogin : UserControl
    {
        #region Fields

        /// <summary>
        ///     The redirect url str.
        /// </summary>
        private string RedirectUrlStr = "/";

        #endregion

        #region Methods

        /// <summary>
        ///     The btn submit_ click.
        /// </summary>
        /// <param name="sender">
        ///     The sender.
        /// </param>
        /// <param name="e">
        ///     The e.
        /// </param>
        /// <exception cref="AuthenticationException">
        /// </exception>
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            if (this.ValidateData())
            {
                try
                {
                    var domain = Sitecore.Context.Domain;
                    var domainUser = domain.Name + @"\" + this.txtUserName.Text;
                    if (AuthenticationManager.Login(domainUser, this.txtPassword.Text))
                    {
                        WebUtil.Redirect(this.RedirectUrlStr);
                    }
                    else
                    {
                        this.pnlError.Visible = true;
                        throw new AuthenticationException("Invalid username or password.");
                    }
                }
                catch (AuthenticationException)
                {
                }
            }
        }

        /// <summary>
        ///     The page_ load.
        /// </summary>
        /// <param name="sender">
        ///     The sender.
        /// </param>
        /// <param name="e">
        ///     The e.
        /// </param>
        private void Page_Load(object sender, EventArgs e)
        {
            if (this.Request.QueryString["item"] != null)
            {
                var path = this.Request.QueryString["item"];
                using (new SecurityDisabler())
                {
                    var itemUrl = "/sitecore/content/Home" + path.Replace("-", " ");
                    if (!string.IsNullOrEmpty(itemUrl))
                    {
                        var dest = Sitecore.Context.Database.GetItem(itemUrl);
                        if (dest != null)
                        {
                            this.RedirectUrlStr = LinkManager.GetItemUrl(dest);
                        }
                    }
                }
            }
        }

        /// <summary>
        ///     The validate data.
        /// </summary>
        /// <returns>
        ///     The <see cref="bool" />.
        /// </returns>
        private bool ValidateData()
        {
            var isValid = true;

            if (string.IsNullOrEmpty(this.txtUserName.Text) || string.IsNullOrEmpty(this.txtPassword.Text))
            {
                this.pnlError.Visible = true;
                isValid = false;
            }

            return isValid;
        }

        #endregion
    }
}
Uncategorized