Caution
메일캐리어 7.5.8부터는 보안이 취약한 기존 Referer only 방식은 더 이상 지원하지 않습니다. Referer 정보와 더불어 로그인 정보에 대한 서명 정보를 확인해 웹액세스 로그인을 처리합니다.
다른 웹사이트에서 메일캐리어 웹액세스로 이동 시 사용자 인증(메일 계정과 암호 입력) 없이 자동으로 로그인 시킬 수 있습니다. 예를 들어 사내 그룹웨어 시스템에 로그인해서 사용하다가 웹액세스 시스템으로 이동한다면 일반적으로 웹액세스에 다시 로그인해야 하는 번거로움이 있습니다. 이미 그룹웨어에서 인증되었기 때문에 웹액세스 인증 없이 바로 웹액세스의 로그인 상태가 된다면 보다 편리한 환경을 제공할 수 있습니다.
메일캐리어 웹액세스/웹모바일은 이를 위해 HTTP referer를 검사해 인증시키는 방법을 제공합니다. 그룹웨어 도메인을 웹액세스의 허용 referer 목록에 추가하고 그룹웨어 페이지에서 웹액세스로의 자동 로그인 링크를 작성합니다. 로그인 URL은 로그인 계정과 URL을 검증할 수 있는 서명 정보를 담고 있습니다. 사용자가 해당 링크 클릭 시 웹액세스는 그룹웨어가 referer 목록에 있고 서명이 올바르면 인증을 통과시켜 로그인된 상태로 만듭니다.
기능을 사용하기 위해서는 웹액세스 루트 폴더에 있는 Web.config 파일에서 EnableSsoUsingReferer 키에 true를 지정합니다.
SingleSignOnPassword에 서명 검증에 사용할 암호를 지정합니다. 매우 복잡한 암호를 사용합니다.
웹액세스를 iframe에 로딩한다면 LoadableInFrame 키에 true를 지정합니다. 독립된 창으로 열 경우 false를 지정합니다.
<appSettings>
<add key="EnableSsoUsingReferer" value="true" />
<add key="SingleSignOnPassword" value="my-secret-key" />
<add key="LoadableInFrame" value="true" />
</appSettings>웹액세스 파일 중 App_Data/referer.xml을 편집기에서 엽니다.
웹액세스 접속 링크가 게시될 사이트 URL을 다음과 같은 형식으로 추가합니다.
<allowed>
<site>https://gw.tabslab.com</site>
</allowed>Referer가 여러 개일 경우 <site /> 태그를 여러 개 추가할 수 있습니다.
계정과 현재 시각(UTC)을 조합한 후 HMAC-SHA256 알고리즘을 사용해 서명합니다. 서명 데이터는 hex 코드로 출력해 사용합니다.
현재 시각은 2026-09-28T08:06:53과 같은 ISO 8601 부분 형식으로 출력합니다.
서명 작성에 사용된 암호는 EnableSsoUsingReferer에 지정한 값과 동일한 암호를 사용합니다.
서명과 시각 값은 Sign과 Timestamp 파라미터를 사용해 전달합니다.
생성된 URL은 5분간 유효합니다.
using System.Security.Cryptography;
protected void Page_Load(object sender, EventArgs e)
{
string loginMailAddr = "user@domain.com";
string timestamp = DateTime.UtcNow.ToString("s");
string signature = Sign(loginMailAddr + "|" + timestamp);
string url = string.Format("https://mail.tabslab.com/External/Logon.ashx?User={0}&Timestamp={1}&Sign={2}", loginMailAddr, timestamp, signature);
Response.Redirect(url);
}
private string Sign(string message)
{
string secretKey = "my-secret-key";
byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey);
byte[] messageBytes = Encoding.UTF8.GetBytes(message);
// HMAC-SHA256 객체 생성
using (var hmac = new HMACSHA256(keyBytes))
{
byte[] hashBytes = hmac.ComputeHash(messageBytes);
return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
}
}Logon.ashx에 추가 전달 가능한 파라미터는 다음과 같습니다.
이름 | 설명 |
|---|---|
Lang | 화면 표시 언어를 지정할 수 있습니다. ko - 한국어, en - 영어 지정하지 않을 경우 ko로 동작합니다. |
Skin | 웹액세스에 적용할 스킨을 지정합니다. 웹액세스 AppSetting - 디자인 및 레이아웃 - FixedSkinName/DefaultSkinName 설정에 따라 동작합니다. 웹모바일은 해당 사항 없습니다. |
Tz | 적용할 표준 시간대를 지정합니다. 한국 - Korea Standard Time, 미국/캐나다 동부 표준시 - Eastern Standard Time, ... 등 공백 문자를 포함하므로 URL 파라미터로 사용 시 encodeURIComponent()로 처리해야 합니다. 미지정 시 메일 서버의 표준 시간대가 사용됩니다. |
ReturnUrl | 로그인 후 이동할 웹액세스 페이지 URL을 지정합니다. URL은 반드시 Server.UrlEncode로 인코딩해야 올바르게 처리됩니다. ReturnUrl을 지정하지 않으면 /Mail/Default.aspx로 이동합니다. |
protected void Page_Load(object sender, EventArgs e)
{
string loginMailAddr = "user@domain.com";
string timestamp = DateTime.UtcNow.ToString("s");
string signature = Sign(loginMailAddr + "|" + timestamp);
string gotoUrl = "/Board/Default.aspx";
string url = string.Format("https://mail.tabslab.com/External/Logon.ashx?User={0}&Timestamp={1}&Sign={2}&Lang=ko&ReturnUrl={3}", loginMailAddr, timestamp, signature, Server.UrlEncode(gotoUrl));
Response.Redirect(url);
}ASP에서도 동일한 방식으로 서명을 생성해 referer 인증을 진행할 수 있습니다.
ASP에서는 HMAC-SHA256 알고리즘을 지원하지 않으므로 별도의 외부 라이브러리(sha256.wsc)를 사용해 구현합니다. Tools\Resources\SSO\sha256.wsc 파일을 ASP 파일과 동일 위치에 복사하면 GetObject 메서드를 사용해 호출할 수 있습니다.
<%
Dim loginMailAddr, utcTime, timestamp, signature, gotoUrl, param
loginMailAddr = "user@domain.com"
utcTime = DateAdd("h", -9, Now())
timestamp = GetIso8601Time(utcTime)
signature = Sign(loginMailAddr & "|" & timestamp)
param = "User=" & loginMailAddr & "&Timestamp=" & timestamp & "&Sign=" & signature
gotoUrl = Request("goto")
If gotoUrl <> "" Then
param = param & "&ReturnUrl=" & Server.UrlEncode(gotoUrl)
End If
Response.Redirect "https://mail.tabslab.com/External/Logon.ashx?" & param
Function Sign(message)
Dim sha256, secretKey
secretKey = "my-secret-key"
Set sha256 = GetObject("script:" & Server.MapPath("sha256.wsc"))
sha256.hexcase = 0 '0 = 소문자 hex, 1 = 대문자 hex
Sign = sha256.hex_hmac_sha256(secretKey, message)
End Function
Function GetIso8601Time(t)
GetIso8601Time = CStr(Year(t)) & "-" & Right("0" & Month(t), 2) & "-" & Right("0" & Day(t), 2) & "T" &_
Right("0" & Hour(t), 2) & ":" & Right("0" & Minute(t), 2) & ":" & Right("0" & Second(t), 2)
End Function
%>최근 크로스 도메인에 대한 웹브라우저의 보안이 강화됨에 따라 iframe 내의 웹사이트에서는 쿠키 생성이 제한됩니다. 따라서 웹메일 로그인 자체가 불가능해집니다. 반드시 iframe 사이트와 iframe을 감싸는 사이트의 도메인을 동일하게 구성하기 바랍니다.
보다 상세한 내용은 웹메일 사이트를 그룹웨어 사이트의 프레임에 넣을 경우 로그인이 되지 않는 경우을 참고 바랍니다.