2016-01-22 11 views
8

Mam konfigurację projektu asp.net5 do korzystania z uwierzytelniania systemu Windows. Kiedy ustawiam punkt przerwania i patrzę na użytkownika, widzę, że istnieje tablica roszczeń zawierająca identyfikator SID grupy. Jak uzyskać rzeczywistą nazwę grupy z roszczeń?AspNet5 - Windows Uwierzytelnianie Uzyskaj nazwę grupy z roszczeń

Próbuję ograniczyć zalogowanych użytkowników systemu Windows przy użyciu aktywnych grup katalogów, do których należą, i staram się je skonfigurować.

Pytania: Jak mogę zobaczyć aktywne grupy katalogów, do których należy zalogowany użytkownik? Jak przekonwertować identyfikator GroupSID na nazwę grupy? Czy muszę uwzględnić w pliku startup.cs cokolwiek, aby ograniczyć niektóre grupy do połączeń serwisowych REST?

Widzę przykłady ręcznego konfigurowania roszczeń na podstawie zalogowanego użytkownika. Jestem zainteresowany wykorzystaniem uwierzytelnionego użytkownika systemu Windows i jego grup w celu ograniczenia dostępu.

Dzięki

Odpowiedz

3

Nie. Niestety tak nie działa uwierzytelnianie systemu Windows. Możesz tylko sprawdzić, czy użytkownik jest w roli (i istnieje wymóg Polityki), a nie wyliczać ról, w których się znajdują - które pobierają usługi katalogowe i które nie zostały przeniesione do rdzenia.

(Należy pamiętać, że, eee, User.IsInRole() jest uszkodzony teraz dla tożsamości systemu Windows, która zostanie ustalona w RC2).

+0

Dzięki za odpowiedź. Czy mogę teraz odłączyć RC2? A może RC2 jest jeszcze niedostępny? Czy jest to tak łatwe jak asp.net 4, w którym dekoruję metodę odpoczynku za pomocą [Uwierzytelnij] i [Autoryzuj ("nazwa grupy")] lub czy muszę napisać kilka niestandardowych kodów? –

+0

Nie możesz jeszcze tego zdobyć. Wkrótce. A kiedy to zadziała, tak, to będzie to samo, jeśli nie chcesz używać zasad. Możesz po prostu zrobić [Authorize (Roles = '')] – blowdart

+0

@blowdart, jeśli masz problem z githubem, ponieważ IsInRole() jest zepsuty, czy może się zdarzyć, że jest uszkodzony? – JosephGarrone

11

Rzeczywiście można jeszcze dostać nazwę grupy przy użyciu następujących:

var test = new System.Security.Principal.SecurityIdentifier("S-1-5-21-3290390516-4063083420-3538132138-1146").Translate(typeof(System.Security.Principal.NTAccount)).ToString(); 

Tak na przykład:

var roles = ((ClaimsIdentity)_context.User.Identity).Claims.Where(q => q.Type == ClaimTypes.GroupSid).Select(q => q.Value); 

_logger.LogInformation($"Got {roles.Count()} roles"); 

foreach (var role in roles) 
{ 
    var name = new System.Security.Principal.SecurityIdentifier(role).Translate(typeof(System.Security.Principal.NTAccount)).ToString(); 
    _logger.LogInformation($"Got role {role}"); 
} 

Wyjścia:

(namespace).Authorization.Handlers.SiteHandler: Information: Got 18 roles 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role (redacted)\Domain Users 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role Everyone 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role (redacted)\(redacted) Backend 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role (redacted)\(redacted) Dashboards 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role BUILTIN\Performance Log Users 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role BUILTIN\Users 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role NT AUTHORITY\INTERACTIVE 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role CONSOLE LOGON 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role NT AUTHORITY\Authenticated Users 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role NT AUTHORITY\This Organization 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role LOCAL 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role (redacted)\jira-users 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role (redacted)\jira-developers 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role (redacted)\(redacted)_PDMS_DE_ALL 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role (redacted)\(redacted)_PDMS_BE_ALL 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role (redacted)\(redacted)Developers 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role (redacted)\(redacted)_TEST 
(namespace).Authorization.Handlers.SiteHandler: Information: Got role (redacted)\(redacted)_PDMS_DB_ALL 

Uwaga: wypełnienie ról domeny może potrwać sekunda lub dwie.

+0

Jest to bardzo pomocne, dopóki RC2 nie zostanie zwolniony. Dobry –

+3

Czy jest lepszy sposób na zrobienie tego teraz, gdy 1.0 jest na zewnątrz? – Charles