각각의 웹 어플리케이션들의 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("<", "<").Replace(">", ">");
}
#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
}