2016-09-22 6 views
0

ASP NET MVC 웹 사이트에서 OpenID Connect 표준을 사용하는 샘플 앱을 구현했습니다. 내 목표는 민감한 데이터를 Azure에 저장하는 것을 아웃소싱하여 Azure Active Directory를 사용하는 것이 었습니다. Azure의 사용자에게 사용자 지정 속성을 추가하는 것은 불가능하기 때문에 개인 DB에 민감하지 않은 사용자 클레임을 저장합니다. 나는이 주장을 얻을이 같은 쿠키로 "추가"관리 :OpenID Connect ASP NET MVC AAD

new OpenIdConnectAuthenticationOptions 
      { 
       ClientId = clientId, 
       Authority = authority, 
       PostLogoutRedirectUri = postLogoutRedirectUri, 
       RedirectUri = postLogoutRedirectUri, 
       Notifications = new OpenIdConnectAuthenticationNotifications 
       { 
        AuthorizationCodeReceived = context => 
        { 
         var objectId = context.AuthenticationTicket.Identity.Claims.First(x => x.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier"); 
         var claims = GetUserClaims(objectId.Value); 
         foreach (var item in claims) 
         { 
          context.AuthenticationTicket.Identity.AddClaim(new System.Security.Claims.Claim(item.Key, item.Value)); 
         } 
         return Task.FromResult(0); 
        } 
       } 

나는 괜찮 그 주장은 사용자 로그 아웃 할 때까지 내 사용자 개체에 계속 그래서 쿠키에 대한 주장을 필요한 추가 된이 방법 만 세션 중에 변경할 수있는 클레임이 하나 있습니다 (기본적으로 한 페이지에서 변경할 수 있음). 문제는 쿠키에서이 클레임을 "변경"하는 방법을 찾을 수 없기 때문에 계속 유지됩니다. 이상적으로 어떻게 든 강제로 싶습니다

함수를 다시 호출 할 수 AuthorizationCodeReceived. 가능한가? 아니면 쿠키에 저장된 값을 바꿀 수있는 다른 방법이 있습니까?

지금까지 유일한 해결책은이 값을 변경할 때 사용자를 로그 아웃하여 다시 로그 아웃하도록하고, AuthorizationCodeReceived에 대한 콜백이 다시 호출되지만 매우 사용자 친화적 인 방법은 아닙니다.

답변

0

HttpContext.GetOwinContext(). Authentication.SignIn()을 호출하면 ID 개체에 클레임을 추가하여 새 클레임을 쿠키에 유지할 수 있습니다.

+0

알려 드리겠습니다. – MajkeloDev

+0

나는 이것을 시도했다. AuthorizationCodeReceived를 호출하지 않았지만 작동하지 않았습니다. HttpContext.GetOwinContext(). Authentication.Challenge (새 AuthenticationProperties {RedirectUri = "/"}, OpenIdConnectAuthenticationDefaults.AuthenticationType); – MajkeloDev

+0

답변을 내 코드로 작성하면 완료로 표시하겠습니다. 누군가 유용 할 수 있습니다. :) – MajkeloDev