양식을 사용하여 더 많은 정보 저장인증.인증 쿠키 설정
로그인을 위한 인증 쿠키 설정을 위해 aspx와 c#을 사용하고 있습니다.
FormsAuthentication.SetAuthCookie(UserName, True)
같은 쿠키에 더 많은 정보를 저장하고 싶습니다.이 인증 쿠키에 값을 추가할 수 있습니까? 아니면 두 번째 http 쿠키를 사용해야 합니까?
기본적으로 나는 사용자의 것을 저장할 방법을 찾고 있습니다.Id
사용자 테이블 행 키를 사용하여 데이터베이스에 접근할 수 있습니다.
고마워요, 이든
양식에 사용자 데이터를 추가할 수 있습니다.인증티켓을 끊은 다음 직접 쿠키를 생성합니다.
양식에 대한 MSDN 문서에 예가 있습니다.인증티켓이요.
편집
티켓을 생성할 때는 일반적으로 web.config에 구성된 값과 동일한 시간 제한을 설정해야 합니다.불행히도 Framework 3.5 또는 그 이전에FormsAuthentication
class는 이 시간 초과를 공개적으로 노출하지 않습니다.해결 방법은 이 연결 피드백 항목에 대한 응답에 설명된 방법 중 하나를 사용합니다.
갱신하다
안타깝게도 Connect 피드백 항목은 더 이상 존재하지 않습니다.기술이 무엇인지 간략하게 설명해 주셨으면 좋았을 텐데요.
네, 마이크로소프트가 과거의 Connect 항목을 폐기한 것은 유감스러운 일입니다.IIRC에서 제안한 두 가지 기법은 다음과 같습니다.
WebConfigurationManager를 사용하여 관련 구성 섹션을 읽고 시간 초과 값을 가져옵니다.
다음을 사용하여 쿠키 만들기
FormsAuthentication.GetAuthCookie
, 를 사용하여 암호를 해독합니다.FormsAuthentication.Decrypt
그리고 발생된 것을 검사합니다.FormsAuthenticationTicket
.
또는 로 업그레이드합니다.NET 4.x 가 있는 곳에FormsAuthentication.Timeout
소유물.
자세한 내용은 이 질문을 참조
당신에게 유용하기만 하면 당신이 원하는 것을 인증 쿠키에 넣을 수 있습니다.즉, 민감한 정보를 입력하는 경우에는 적어도 암호화해야 하지만, 민감한 정보는 입력하지 않는 것이 좋습니다.다음과 같은 작업을 수행할 수 있습니다.
Forms.SetAuthCookie (UserName + "|" + UserId, true);
그러면 사용자 이름이나 사용자 ID가 필요할 때는 언제든지 사용할 수 있습니다.쿠키를 로드하고 필요한 값을 분석하기만 하면 됩니다.
다시 한 번 말씀드리지만, 특히 위에서 말씀드린 바와 같이 이를 하지 말 것을 권합니다.하지만, 가능합니다.데이터를 빼내기 위해 접근자 메소드를 만들어야 합니다.
public int CurrentUserId
{
get
{
int userId = 0;
if (HttpContext.Current.Request.IsAuthenticated)
{
userId = Convert.ToInt32(HttpContext.Current.User.Identity.Name.Split('|')[1]);
}
return userId;
}
}
public string CurrentUserName
{
get
{
string userName = string.Empty;
if (HttpContext.Current.Request.IsAuthenticated)
{
userName = HttpContext.Current.User.Identity.Name.Split('|')[0];
}
return userName;
}
}
네, 더 많은 정보를 넣기 위해서는 "|"를 사용하는 것이 현명합니다.Microsoft에 오버로드된 다른 메서드가 있는 경우
public static void SetAuthCookie(String userName, bool createPersistentCookie, string userData)`
그러면 우리의 생활은 훨씬 쉬워지고, 우리의 코드는 더 안전해질 겁니다.
해당 사용자 ID를 userName 매개변수로 전달합니다.
FormsAuthentication.SetAuthCookie(userId, True)
인증 티켓은 어떻게 확보하고 있습니까?
를 할 에 추가 정보를 할 수 .UserData
의 FormsAuthenticationTicket
:
using Newtonsoft.Json;
using System.Web;
using System.Web.Security;
public class LoggedInUser
{
public string FirstName { get; set; } = null;
public bool IsAdmin { get; set; } = false;
}
public static class Authentication
{
static void SignIn(
HttpContextBase context,
string emailAddress,
bool rememberMe,
LoggedInUser user = null)
{
var cookie = FormsAuthentication.GetAuthCookie(
emailAddress.ToLower(),
rememberMe);
var oldTicket = FormsAuthentication.Decrypt(cookie.Value);
var newTicket = new FormsAuthenticationTicket(
oldTicket.Version,
oldTicket.Name,
oldTicket.IssueDate,
oldTicket.Expiration,
oldTicket.IsPersistent,
JsonConvert.SerializeObject(user ?? new LoggedInUser()));
cookie.Value = FormsAuthentication.Encrypt(newTicket);
context.Response.Cookies.Add(cookie);
}
static void SignOut(HttpContextBase context)
{
FormsAuthentication.SignOut();
}
static LoggedInUser GetLoggedInUser()
{
if (HttpContext.Current.User?.Identity?.Name != null && HttpContext.Current.User?.Identity is FormsIdentity identity)
return JsonConvert.DeserializeObject<LoggedInUser>(identity.Ticket.UserData);
return new LoggedInUser();
}
}
자세한 내용: https://learn.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-security/introduction/forms-authentication-configuration-and-advanced-topics-cs#step-4-storing-additional-user-data-in-the-ticket
언급URL : https://stackoverflow.com/questions/1149996/storing-more-information-using-formsauthentication-setauthcookie
'source' 카테고리의 다른 글
MariaDB/"mysql shell"을 사용하여 가져오는 동안 오류 1064(42000)가 발생하는 이유는 무엇입니까? (0) | 2023.09.07 |
---|---|
디렉토리 내용을 python으로 디렉토리에 복사 (0) | 2023.09.07 |
PowerShell - "Write-Output" vs "return" 함수 (0) | 2023.09.07 |
url()의 값을 인용할 필요가 있습니까? (0) | 2023.09.02 |
각각 목적어로? (0) | 2023.09.02 |