반응형

각각의 웹 어플리케이션들의 machineKey를 동일하게 설정을 하게 되면 사이트 간의 웹 팜을 구성할 수 있다

한번의 로그인으로 생성된 세션 상태ID를 가지고 웹 팜 내에 구성되어있는 웹 어플리케이션에서 사용할 수 있다.

여기서는 machineKey를 자동으로 생성하는 코드를 공유하도록 하겠습니다.^^

 

- Generator_MachineKey.aspx

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Generator_MachineKey.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>제목 없음</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="btnGeneratorMachineKey" runat="server" Text="Machine Key 생성" OnClick="btnGeneratorMachineKey_Click" /> <br />
        <asp:Label ID="lblMachineKey" runat="server" Font-Size="12px"></asp:Label>
    </div>
    </form>
</body>
</html>

- Generator_MachineKey.aspx.cs

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Security.Cryptography;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    #region protected void btnGeneratorMachineKey_Click(object sender, EventArgs e) [Machine Key 생성 버튼 클릭]
    /// <summary>
    /// Machine Key 생성 버튼 클릭
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnGeneratorMachineKey_Click(object sender, EventArgs e)
    {
        StringBuilder machineKey = new StringBuilder();

        string key64byte = GetRandomKey(64);
        string key32byte = GetRandomKey(32);

        machineKey.Append("<machineKey");
        machineKey.Append(" validationKey=\"" + key64byte + "\"");
        machineKey.Append(" decryptionKey=\"" + key32byte + "\"");
        machineKey.Append(" validation=\"SHA1\" decryption=\"AES\"");
        machineKey.Append(" />\n");

        lblMachineKey.Text = machineKey.ToString().Replace("<", "&lt").Replace(">", "&gt");
    }
    #endregion

    #region public string GetRandomKey(int bytelength) [Machine Key 생성]
    /// <summary>
    /// Machine Key 생성
    /// </summary>
    /// <param name="bytelength"></param>
    /// <returns></returns>
    public string GetRandomKey(int bytelength)
    {
        byte[] buff = new byte[bytelength];
        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
        rng.GetBytes(buff);

        StringBuilder sb = new StringBuilder(bytelength * 2);
        for (int i = 0; i < buff.Length; i++)
        {
            sb.Append(string.Format("{0:X2}", buff[i]));
        }

        return sb.ToString();
    }
    #endregion
}

 

 

반응형

+ Recent posts