2016-10-10 26 views
5

我有一個Stormpath中間件進行認證的應用程序設置。我也有我的帳戶設置使用每個組織模型的組。它似乎登錄和一切,但我很努力尋找一種合理的方式來獲得登錄用戶的組織ID或名稱基地。在.Net Core中檢索Stormpath中的用戶組織?

隨着Stormpath.SDK.Account參考,我可以做類似:

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

我希望類似的東西可以檢索組織,但我沒有找到他們的SDK參考中的任何東西。到目前爲止,我已經嘗試過:

從我的索賠中檢索組織。 This looks like it'll be available via the "onk" claim,但我沒有看到,在_claim的屬性從下面的代碼看時作爲一個選項:

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

我還沒有看到一個方法來檢索組織了頭的。它appears that Host is available in the header,但用於Core的SDK似乎並沒有讓我知道。

理想情況下,我希望用戶能夠登錄,而不必將其租戶指定爲登錄表單中的子域或字段。由於它將通過我的組織商店,我認爲這是可行的。

關於我失蹤的任何想法?

+0

這實際上是一個用例,我現在正在推測並開始工作(我是Stormpath SDK的作者)。只是爲了正確理解你的情況:在登錄期間你不會指定組織(讓默認的登錄流程迭代Orgs),並且希望稍後再獲取用戶的組織? –

+0

是的。例如,如果我要用多租戶推出我自己的登錄系統,我希望組織與我的用戶帳戶有很多關係。同樣,用戶可能會與組織有單一(或多個)關係。這樣,我可以做Account.OrganizationId來管理我自己的數據庫中的TenantId列。目前,它看起來像我可以從.NET中的主機頭獲得。不過,我還沒有想出如何通過標準/登錄表單傳遞這些信息。 –

+0

啊,首先錯過了你的問題中的「每個組織模型的組」模式。只是爲了澄清:您的租戶是使用Stormpath Group資源建模的嗎? –

回答

0

它可能在Stormpath使用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"); 

爲了能夠添加組和帳戶的組織中提到的方法上面,我們也應該確保我們將此帳戶商店標記爲我們對帳戶和組的默認值:

newMapping.SetDefaultAccountStore(true) 
.SetDefaultGroupStore(true); 

await newMapping.SaveAsync(); 

添加帳戶到一個組織:

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對象來說是可行的,因爲您可以在事實之後枚舉Account組。

聲明:我在Stormpath工作。