GetCredentialtype u.a.

Wie kann ich mehr über eine Anmeldeadresse erfahren? Diese Frage stellen sich vielleicht Administratoren aber eher noch Entwickler, die per OATH z.B. die Anmeldung in eigenen Anmeldungen verwenden möchten. Wenn Sie als Entwickler eine Anmeldung nicht über eine eigene Datenbank mit Kennwort etc. realisieren, sondern die großen Cloud-Dienste nutzen ("Anmelden mit Apple", "Mit Facebook anmelden", "Mit Google anmelden" oder eben auch "mit Microsoft anmelden"), dann will man schon mehr wissen. Aber auch für einen Consultant kann es interessant sein, zu einer Mailadresse etwas mehr zu erfahren.

Microsoft GetCredentialtype-Service

Wenn Sie eine Anmeldung an Office 365 oder Microsoft Konten per "Fiddler" mitschneiden, dann finden Sie schon einige URLs, die auf so einen Informations-Service hinweisen. Allerdings schützt Microsoft sich hier gegen Replay-Attacken durch Cookies und andere Möglichkeiten. Sie sollten solche Abrufe also nicht übertreiben.

Im wesentlichen ist es ein REST-Aufruf mit dem Benutzernamen in einem JSON-Payload. Das geht per PowerShell recht einfach:

Invoke-RestMethod `
   -Uri "https://login.microsoftonline.com/common/GetCredentialtype" `
   -ContentType "application/json" `
   -Method POST `
   -Body (@{"username"="invalid@invalid.domain"} `
|convertto-json)

Username : invalid@invalid.domain
Display : invalid@invalid.domain
IfExistsResult : 1
ThrottleStatus : 1
Credentials : @{PrefCredential=1; HasPassword=True; RemoteNgcParams=; FidoParams=; SasParams=; CertAuthParams=;GoogleParams=}
EstsProperties : @{DomainType=1}
IsSignupDisallowed : False
apiCanary : AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tApQ0ItAdLtHJzdhYkZlsMiC5JKx7AXfINUXX_EULRPbVr7Us5Zk7e7ja0hdXiLCeyqd
luWIqELHFVj0AXP81rK_ZgUqwXkBkCfIdF5jV3O1pH-spu8jDJY3_mvrAWda2xmqXFRK1RT3mMZNbxPrdhXnyIA1ZJvLH9AuYU
tMWPYYMDrjKTjJhKfEv6SH6VVbF4EhUDaVEJG18xVOH-0CzZzSAA

Wenn Sie die URL einfach so aufrufen, dann zeigt der Browser die Fehler-JSON-Datei an

https://login.microsoftonline.com/common/GetCredentialType

Eine Dokumentation zu dem Service habe ich aber noch nicht gefunden. Allerdings hilft hier ja Fiddler weiter.

Testserie

Je nach angefragter Adresse verändern sich die Rückgabewerte. Hier eine kleine Liste:

Adresse Ungültige Domain Microsoft-ID
(früher Passport)
Office 365
AzureAD CloudUser
und ADSync User
Ungültiger User in AzureAD

IfExistsResult

1

1

0

1

ThrottleStatus

1

0

0

0

Credentials

@{
PrefCredential=1; 
HasPassword=True; 
RemoteNgcParams=; 
FidoParams=; 
SasParams=; 
CertAuthParams=;
GoogleParams=
}
@{
PrefCredential=1; 
HasPassword=True; 
RemoteNgcParams=; 
FidoParams=; 
SasParams=; 
CertAuthParams=;
GoogleParams=
}
@{
PrefCredential=1; 
HasPassword=True; 
RemoteNgcParams=; 
FidoParams=; 
SasParams=; 
CertAuthParams=;
GoogleParams=
}
@{
PrefCredential=1; 
HasPassword=True; 
RemoteNgcParams=; 
FidoParams=; 
SasParams=; 
CertAuthParams=;
GoogleParams=
}

EstsProperties

@{
DomainType=1
}
@{
DomainType=1
}
@{
DesktopSsoEnabled=True; 
UserTenantBranding=System.Object[]; 
DomainType=3}

EstsProperties.UserTenantBranding

$null
Locale                 : 0
BannerLogo             : https://aadcdn.msauthimages.net/xxx/
                           logintenantbranding/0/bannerlogo?ts=xxx
Illustration           : https://aadcdn.msauthimages.net/xxx/
                           logintenantbranding/0/illustration?ts=xxx
BoilerPlateText        : <p>Bitte anmelden.</p>
UserIdLabel            : Vorname.Nachname@msxfaq.de
KeepMeSignedInDisabled : False
UseTransparentLightBox : False

IsSignupDisallowed

False

True

True

True

UserIDLabel

$null
$null
vorname.nachname@msxfaq.de
vorname.nachname@msxfaq.de

Deutung der Felder

Wenn Sie sich die Daten anschauen, dann sind schon Unterschiede erkennbar und welche Informationen daraus generiert werden können.

Feld Bewertung

IfExistsResult

Diese Feld ist anscheinend nur dann auf "0" gesetzt, wenn ich ein gültiges AzureAD-Konto abfrage. Es ist aber nicht hinreichend, ob es vielleicht ein passendes Microsoft-Konto (vormals Passport) gibt.

ThrottleStatus

Der Wert ist anscheinend nur gesetzt, wenn die Microsoft Anmeldedienste mit der Domain überhaupt nichts anfangen können. Sobald die Domain in AzureAD bekannt ist, ist der Status 0

Credentials

Der Inhalte hier war bei allen von mir getestete UPNs immer gleich. Es hat aber den Anschein, dass Microsoft hier schon weitere Funktionen vorbereitet hat. Vielleicht liegt es aber auch nur an meiner "einfachen Anfrage", dass keine weitere Daten geliefert werden.

EstsProperties

Dieses Feld eignet sich wohl recht gut, um AzureAD von MIcrosoft-Konten über das Property "DomainType" zu unterscheiden.

  • 1= Unbekannt oder Microsoft Konto
  • 3 = AzureAD Konto oder Domain

Weitere Werte wie 0,2 oder 4 habe ich noch nicht gefunden

EstsProperties.UserTenantBranding

Wenn es sich um eine AzureAD-Domain handelt, dann enthält "EstsProperties" weitergehende Informationen. Insbesondere die Informationen unter "UserTenantBranding" liefern z.B. die Bilder im Anmeldebildschirm und "UserIdLabel" scheint eine Bildungsregel des UPN zu enthalten. Ich weiß aber noch nicht, woher Microsoft diese Information bezieht.

IsSignupDisallowed

Das Feld hat nur dann den Wert "False", wenn die Adresse weder als Microsoft Konto noch als AzureAD-Konto genutzt wird.

UserIDLabel

$null

userrealm

GetCredentialtype ist aber nicht die einzige URL. In einem anderen Trace habe ich z.B. die folgende URL gefunden, die ich per PowerShell einfach anonym abrufen kann

Invoke-RestMethod -Uri ("https://login.microsoftonline.com/common/userrealm/<upn>?api-version=2.0")

Beim Abruf per PowerShell gibt es auch interessante Antworten:

Adresse Ergebnis

Ungültige Domain

NameSpaceType       : Unknown
Login               : invaliddomain@invaliddomain.tld
cloud_instance_name : microsoftonline.com
Microsoft-ID
(früher Passport)
NameSpaceType       : Federated
federation_protocol : WSTrust
Login               : user@outlook.com
AuthURL             : https://login.live.com/login.srf?username=frank.carius%40outlook.com&wa=wsignin1.0&wtrealm=urn%3a
                      federation%3aMicrosoftOnline&wctx=
DomainName          : live.com
FederationBrandName : Windows Live
ConsumerDomain      : True
TenantBrandingInfo  :
cloud_instance_name : microsoftonline.com
Office 365
AzureAD CloudUser
und ADSync User
NameSpaceType       : Managed
Login               : demouser1@msxfaq.de
DomainName          : msxfaq.de
FederationBrandName : MSXFAQ
                          BannerLogo=https://aadcdn.msauthimages.net/xxx/logintenantbranding/0/bannerlogo?ts=xxx; 
                          Illustration=https://aadcdn.msauthimages.net/xxx-xxxx/logintenantbranding/0/illustration?ts=xxx; 
                          BoilerPlateText=<p>Bitte anmelden.</p>; 
                          UserIdLabel=Vorname.Nachname@msxfaq.de; 
                          KeepMeSignedInDisabled=False;
                          UseTransparentLightBox=False}}
cloud_instance_name : microsoftonline.com
is_dsso_enabled     : True

Ungültiger User in AzureAD

NameSpaceType       : Managed
Login               : unknownuser@msxfaq.de
DomainName          : msxfaq.de
FederationBrandName : msxfaq
TenantBrandingInfo  : {@{Locale=0; 
                          BannerLogo=https://aadcdn.msauthimages.net/xxx/logintenantbranding/0/bannerlogo?ts=xxx; 
                          Illustration=https://aadcdn.msauthimages.net/xxx-xxxx/logintenantbranding/0/illustration?ts=xxx; 
                          BoilerPlateText=<p>Bitte anmelden.</p>; 
                          UserIdLabel=Vorname.Nachname@msxfaq.de; 
                          KeepMeSignedInDisabled=False;
                          UseTransparentLightBox=False}}
cloud_instance_name : microsoftonline.com
is_dsso_enabled     : True

Wenn es eine eindeutige "LiveID" ist, dann ist das im Domainname zu finden. Wenn die gleiche Adresse aber auch in AzureAD verwendet wird, dann bekommen Sie den Tenant zurück.

GetUserRealm.srf

Eine vermutlich noch ältere URL ist "GetUserRealm.srf", die per Powershell wie folgt abgefragt werden kann

Invoke-RestMethod -Uri ("https://login.microsoftonline.com/GetUserRealm.srf?login=$($upn)")

Auch hier gibt es interessante Ergebnisse:

Adresse Ergebnis

Ungültige Domain

State         : 4
UserState     : 1
Login         : invaliddomain@nodomain.tld
NameSpaceType : Unknown
Microsoft-ID
(früher Passport)
State                   : 3
UserState               : 2
Login                   : frank.carius@outlook.com
NameSpaceType           : Federated
DomainName              : live.com
FederationGlobalVersion : -1
AuthURL                 : https://login.live.com/login.srf?username=user%40outlook.com
                          &wa=wsignin1.0&wtrealm=urn%3afederation%3aMicrosoftOnline&wctx=
FederationBrandName     : Windows Live
CloudInstanceName       : microsoftonline.com
CloudInstanceIssuerUri  : urn:federation:MicrosoftOnline
Office 365
AzureAD CloudUser
und ADSync User
State                  : 4
UserState              : 1
Login                  : demouser@msxfaq.de
NameSpaceType          : Managed
DomainName             : msxfaq.de
FederationBrandName    : MSXFAQ
CloudInstanceName      : microsoftonline.com
CloudInstanceIssuerUri : urn:federation:MicrosoftOnline

Ungültiger User in AzureAD

State                  : 4
UserState              : 1
Login                  : invalid@msxfaq.de
NameSpaceType          : Managed
DomainName             : msxfaq.de
FederationBrandName    : MSXFAQ
CloudInstanceName      : microsoftonline.com
CloudInstanceIssuerUri : urn:federation:MicrosoftOnline

Die Rückgaben dieses Service unterscheiden sich zwar von userrealm aber auch hier erhalten ich keine Information über Adressen, die sowohl also LiveID als auch AzureAD-Konto genutzt werden.

Weitere Links