2016-10-10 43 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工作。