2016-10-10 21 views
5

У меня есть установка приложения с промежуточным программным обеспечением Stormpath для аутентификации. У меня также есть настройка учетной записи, чтобы использовать группу для каждой модели организации. Похоже, что логин и все, но я боюсь найти разумный способ получить идентификатор организации или базу имен у пользователя, который вошёл в систему.Извлечение организации пользователя в Stormpath в .Net Core?

С ссылкой 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, но SDK для Core, похоже, не позволяет мне это получить.

В идеале, я хотел бы, чтобы пользователь мог войти в систему без указания своего арендатора как субдомена или поля в форме входа. Поскольку он будет проходить через магазины моей организации, я ожидаю, что это будет возможно.

Любые идеи о том, что мне не хватает?

+0

Это на самом деле прецедент, который я разрабатываю и работаю прямо сейчас (я являюсь автором SDK Stormpath). Именно поэтому я правильно понимаю ваш случай: вы не укажете Организацию во время входа в систему (разрешите входной поток по умолчанию через 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 

В идеале я хотел бы, чтобы пользователь смог войти без указания их арендатора в качестве субдомена или поле в форме входа. Поскольку он будет проходить через магазины моей организации, я ожидаю, что это будет возможно.

В настоящее время этот объект недоступен для объекта «Организация», но возможен с объектом «Группа», поскольку вы можете перечислить группы учетных записей после факта.

Отказ от ответственности: Я работаю на Stormpath.