2016-06-09 8 views
1

Azure B2C에서 작동하는 MVC 6 .NET Core 웹 사이트를 만드는 데 시간을 들였습니다. 모든 것이 잘 작동하는 것 같습니다. 그러나 올바른 전략을 파악할 수없는 주장을 둘러싼 몇 가지 질문이 있습니다.Azure B2C/.NET 코어로 클레임 업데이트

사용자가 전자 메일, 이름, 성으로 내 사이트에 가입한다고 가정 해보십시오. 등록이 완료되면이 사용자를 참조하는 데이터베이스의 UserProfile 테이블에 레코드를 추가하고 싶습니다.

질문 1 : Azure B2C에서 "UserProfileId"클레임을 만들어야합니까? 또는 AD 사용자를 참조하는 데이터베이스 테이블에 "ObjectId"필드를 만들어야합니까? 무엇이 더 합리적인가?

질문 2 : 일단 사용자가 AD 사용자 클레임을 어디에 등록하면 어떻게 등록합니까? 나는이 사건 중 하나에서 그것을 할 것이냐? 아니면 다른 곳? 내가 확인할 수있는 "새로운 사용자"라는 주장이 있습니다.

OnAuthenticationValidated 
OnAuthorizationCodeReceived 
OnRedirectToAuthenticationEndpoint 

질문 3 : Microsoft.Azure.ActiveDirectory.GraphClient을 : 내가 사용하는 것, 주장을 업데이트하려면? 누구든지 사용자 정의 클레임을 업데이트하는 방법에 대한 샘플 코드가 있습니까? 나는 이것을 시도했지만 지속되지 않는 것 같습니다 :

var identity = context.AuthenticationTicket.Principal.Identity as ClaimsIdentity; 
identity?.AddClaim(new Claim("EmployeeId", "33")); 

다음은 나의 인증 구성입니다. 감사!!!!!

public void ConfigureAuth(IApplicationBuilder app, IOptions<PolicySettings> policySettings, AuthenticationHelper authHelper) 
{ 
    app.UseCookieAuthentication(options => 
    { 
     options.AutomaticAuthenticate = true; 
     options.AutomaticChallenge = true; 
     options.AccessDeniedPath = "/Home/Forbidden"; 
     options.CookieSecure = CookieSecureOption.Always; 
     options.ExpireTimeSpan = TimeSpan.FromHours(1); 
     options.SlidingExpiration = true; 
    }); 

    app.UseOpenIdConnectAuthentication(options => 
    { 
     options.PostLogoutRedirectUri = policySettings.Value.PostLogoutRedirectUri; 
     options.AutomaticAuthenticate = true; 
     options.AutomaticChallenge = true; 
     options.ClientId = policySettings.Value.ClientId; 
     options.CallbackPath = new PathString("/signin-mysite"); 
     options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
     options.Scope.Add("openid"); 
     options.Scope.Add("profile"); 
     options.Scope.Add("email"); 
     options.ResponseType = OpenIdConnectResponseTypes.IdToken; 
     options.Authority = string.Format(CultureInfo.InvariantCulture, "{0}/{1}", policySettings.Value.AadInstance, policySettings.Value.Tenant); 
     options.Events = new OpenIdConnectEvents { 
      OnAuthenticationValidated = OnAuthenticationValidated, 
      OnAuthorizationCodeReceived = OnAuthorizationCodeReceived, 
      OnAuthenticationFailed = OnAuthenticationFailed, 
      OnRedirectToAuthenticationEndpoint = OnRedirectToAuthenticationEndpoint 
     }; 
     options.ConfigurationManager = new PolicyConfigurationManager(
      String.Format(CultureInfo.InvariantCulture, "{0}/{1}/{2}/{3}", policySettings.Value.AadInstance, policySettings.Value.Tenant, "v2.0", OpenIdProviderMetadataNames.Discovery), 
      new string[] { policySettings.Value.SignUpInPolicyId, policySettings.Value.ProfilePolicyId, policySettings.Value.PasswordPolicyId }); 
    }); 
} 

답변

0

질문 1 : 나는 푸른 B2C에서 "UserProfileId"주장을 만들어야합니까? 또는 AD 사용자를 참조하는 데이터베이스 테이블에 "ObjectId"필드를 만들어야합니까? 무엇이 더 합리적인가?

1a - B2C 거주자에게 아무 것도 추가하지 않았습니다.

1b - B2C에서 개체 ID를 가져 와서 내 테이블에 대체 키로 저장합니다. 내 테이블에는 고유 ID가 있습니다. 추가 신원 제공 업체를 원할 경우이 절차가 필요합니다.

저는 B2C의 객체 ID 만 사용하여 사용자를 찾아보고 내 ID를 얻습니다.

질문 2 : 일단 사용자가 AD 사용자 클레임을 어디에 등록하면 어떻게 등록합니까? 나는이 사건 중 하나에서 그것을 할 것이냐? 아니면 다른 곳? 내가 확인할 수있는 "새로운 사용자"라는 주장이 있습니다.

"클레임 업데이트"라고 말하면 B2C 테넌트에서 영구적으로 업데이트되는 것을 의미합니까, 아니면 다른 특정 클레임에 추가하여이 특정 토큰의 수명 기간 동안 일시적으로 사용한다는 의미입니까?

그래프 클라이언트를 사용하지 않으면 B2C로 다시 연결되지 않습니다.

userIs의 새로운 소유권 주장은 등록 절차가 끝날 때만 B2C에서 제공됩니다. 이를 사용하여 시스템에 액세스하려는 새 사용자가 있는지 판별하십시오. 나는 B2C가 제공하는 클레임에서 내 테이블에 새로운 항목을 생성하기 위해 그 테이블에있는 정보로부터 클레임을 모두 가져온다.

질문 3 : 클레임을 업데이트하려면 Microsoft.Azure.ActiveDirectory.GraphClient? 누구든지 사용자 정의 클레임을 업데이트하는 방법에 대한 샘플 코드가 있습니까? 나는 이것을 시도했지만 지속되지 않는 것 같습니다 :

"업데이트"질문을 다시해야합니다.

당신이 찾고있는 것은 클레임을 "변형"하는 것입니다. 일반적으로 쿠키의 경우 TicketReceived 이벤트 중에 완료됩니다. 이는 이 처음으로으로 인증 될 때 발생합니다. (가입하는 것과 혼동하지 마십시오.)

나는 그다지 밝지는 않지만, 나는 그것을 올바르게하기 위해 너무 많은 시간을 waaaay에 보냈다. 대부분 옵션이 많기 때문에 누구도 프로젝트에 적합한 모든 것을 말할 수 없습니다. 따라서 원하는 비트를 찾기 위해 거쳐간 정보가 많이 보입니다.

내가 발견 한 this book (그리고 작성자)은 매우 유용합니다. 현재이고 그는 정말로 잘 쓰는 Microsoft 사람입니다. 질문 1에 대해서는

HTH

0

: 나는 동일 nhwilly했다 : 내 데이터베이스에 추가 정보를 저장합니다. 질문 2에 대해서는

: 당신은 OnsigningIn 이벤트의 주장을 추가 할 수 있습니다

app.UseCookieAuthentication(new Microsoft.AspNetCore.Builder.CookieAuthenticationOptions() 
     { 
      Events = new CookieAuthenticationEvents() 
      { 
       OnSigningIn = (context) => 
       { 
        ClaimsIdentity identity = (ClaimsIdentity)context.Principal.Identity; 
        identity.AddClaim(new Claim("sb:tID", "555")); 
        return Task.FromResult(0); 
       } 
      } 
     }); 

나는 Transforming Open Id Connect claims in ASP.Net Core에서 정보를 얻었다. 질문 3에 대해서는

: 내가 직접하지 않은,하지만이 링크 가야 당신은 킥 스타트 : https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet

희망하는 데 도움이!