2016-10-10 10 views
5

인증을위한 Stormpath 미들웨어가있는 응용 프로그램 설정이 있습니다. 또한 조직마다 그룹을 사용하도록 내 계정을 설정했습니다. 그것은 로그인과 모든 것으로 보이지만 로그인 한 사용자의 조직 ID 또는 이름 기반을 얻는 합리적인 방법을 찾는 데 어려움을 겪고 있습니다..Net Core의 Stormpath에서 사용자 조직 검색?

Stormpath.SDK.Account 참조를 통해 다음과 같은 작업을 수행 할 수 있습니다. :

private readonly IAccount _account; 
var name = _account.FullName; 

조직을 검색하는 데 사용할 수있는 유사한 기능이있을 것이라고 기대하지만 SDK 참조에서 아무것도 찾을 수 없습니다. 지금까지 나는 다음과 같이 시도했다 :

클레임에서 조직 검색. 나는 또한 헤더에서 조직을 검색 할 수있는 방법을 확인할 수 없습니다

ClaimsPrincipal _claim = new ClaimsPrincipal(User.Identity); 
      var OrganizationId = _claim.FindFirst("onk").Value; 

: This looks like it'll be available via the "onk" claim는하지만 옵션으로 다음 코드에서 _claim의 속성을 볼 때 것을 확인할 수 없습니다. 그것 appears that Host is available in the header,하지만 코어 SDK는 나를 얻을 수 있도록하지 않는 것.

이상적으로는 사용자가 임차인을 로그인 폼의 하위 도메인이나 필드로 지정하지 않고 로그인 할 수있게하고 싶습니다. 그것은 내 조직의 상점을 순서대로 통과 할 것이기 때문에, 나는 그것이 실현 가능할 것으로 기대한다.

실종에 대한 아이디어가 있습니까?

+0

이것은 실제로 제가 지금 specterning하고있는 작업 사례입니다 (저는 Stormpath SDK의 저자입니다). 따라서 귀하의 사례를 정확하게 이해할 수 있습니다. 귀하는 로그인 중 조직을 지정하지 않고 (기본 로그인 흐름을 조직을 통해 반복하도록 함) 나중에 사용자 조직을 가져오고 싶습니까? –

+0

예. 예를 들어 멀티 테넌시를 사용하여 자체 로그인 시스템을 롤업하려면 조직에 내 사용자 계정과 많은 관계가있을 것으로 기대됩니다. 마찬가지로 사용자는 조직에 대해 단일 (또는 여러) 관계를 가질 수 있습니다. 그렇게하면 Account.OrganizationId를 수행하여 내 데이터베이스에서 TenantId 열을 관리 할 수있었습니다. 현재, .NET의 호스트 헤더에서 가져올 수있는 것처럼 보입니다. 하지만이 정보를 표준/로그인 양식을 통해 전달하는 방법을 찾지 못했습니다. –

+0

아, 처음에는 질문의 "조직 모델 별 그룹"부분을 놓치 셨습니다. 명확히하기 위해 : Stormpath Group 자원을 사용하여 세입자를 모델링 했습니까? –

답변

0

namekey을 사용하는 스톰 패스에서 가능합니다.

Organization

var bankOfAOrg = client.Instantiate<IOrganization>() 
    .SetName("Bank of A") 
    .SetNameKey("bank-of-a") 
    .SetStatus(OrganizationStatus.Enabled); 

이 조직에 계정 저장소를 추가 만드는 방법 :

// With a reference to an IDirectory: 
var newMapping = await bankOfAOrg.AddAccountStoreAsync(existingDirectory); 

// Or simply by href: 
newMapping = await bankOfAOrg.AddAccountStoreAsync("directory_href"); 

그룹을 추가 할 수 및 언급 한 방법으로 조직 계정하기 위해 위 계정 저장소를 계정 및 그룹의 기본값으로 표시해야합니다.

조직에 계정을 추가

:

var chewie = client.Instantiate<IAccount>() 
    .SetGivenName("Chewbacca") 
    .SetSurname("the Wookiee") 
    .SetUsername("rrwwgggh") 
    .SetEmail("[email protected]") 
    .SetPassword("Changeme123!"); 
    chewie.CustomData.Put("favoriteShip", "Millennium Falcon"); 

await bankOfAOrg.CreateAccountAsync(chewie); 

더 많은 정보 here을 찾습니다.

0

귀하가 궁금한 점을 언급했지만, 로그인 할 때 조직을 지정하면 사용자의 액세스 토큰에 onk 클레임이 표시됩니다. 예를 들어

:

var request = new PasswordGrantRequest 
{ 
    Username = "[email protected]", 
    Password = "Secret123?", 
    OrganizationNameKey = "acme-org" 
} 

var response = await application.ExecuteOauthRequestAsync(request); 
// response.AccessTokenString will contain an onk claim 

이상적으로, 나는 사용자가 로그인 폼에서 하위 도메인 또는 필드로 자신의 세입자를 지정하지 않고 로그인 할 수 있도록하고 싶습니다. 그것은 내 조직의 상점을 순서대로 통과 할 것이기 때문에, 나는 그것이 실현 가능할 것으로 기대한다.

사실 조직 개체에서는 실현 가능하지 않지만 사실 후에 계정 그룹을 열거 할 수 있으므로 Group 개체와 함께 사용하는 것이 가능합니다.

면책 조항 : Stormpath에서 근무하고 있습니다.