Aus Ihrer Beschreibung, es klingt wie Sie eine delegierte Identitätsmodell verwenden . Das heißt, der Benutzer meldet sich bei der Webanwendung an, und wenn die Webanwendung den Web-API-Dienst aufruft, verwendet er die Identität des aktuell angemeldeten Benutzers.
Wenn dies der Fall ist, müssen Sie WIF konfigurieren, um die "Bootstrap-Tokens" zu speichern. Dies hat zur Folge, dass das ursprüngliche Sicherheitstoken als Eigenschaft für die aktuelle ClaimsIdentity verfügbar ist. Anschließend können Sie den Authorize-Header der Anforderung für den Web-API-Serviceaufruf festlegen.
dies So schalten Sie in .Net 4.5 Sie das saveBootstrapContext Attribut auf dem WIF-Element auf true gesetzt:
<system.identityModel>
<identityConfiguration saveBootstrapContext="true">
...
Für 4 .Net, die Config-lke folgt aussieht:
<microsoft.identityModel>
<service saveBootstrapTokens="true">
...
Dann Um von der Webanwendung aus darauf zuzugreifen, tun Sie etwas (abhängig davon, wie viele Identitäten Sie haben) dies im Controller, der die Web-API aufrufen wird. Für .Net 4.5:
SecurityToken token = (User as ClaimsPrincipal).Identities[0].BootstrapContext;
Für.Net 4: auf die Anrufe an die Web-API als Autorisieren Header
SecurityToken token = (User as ClaimsPrincipal).Identities[0].BootstrapToken;
Nachdem das ursprüngliche Sicherheitstoken erhalten, können Sie es jetzt anhängen. Im Allgemeinen wird dies als Bearer-Token angehängt, was nur eine phantastische Art ist, zu sagen, dass Sie das Wort "Bearer" an den Anfang des Header-Wertes anhängen. Um das Token anhängen, tun Sie etwas wie folgt aus:
WebClient request = new WebClient();
request.Headers.Add("Authorization","bearer " + tokenAsString);
Hinweis: Im Allgemeinen werden Sie verschlüsseln oder Base64 codieren die Token-Wert im Transit statt die rohen String anhängen, vor allem, wenn es XML ist, da einige Frameworks Mangle das XML im Transit.
Um das Token in eine Zeichenfolge zu konvertieren, sollten Sie eine Klasse verwenden, die von SecurityTokenHandler
abgeleitet ist. Es gibt eine Reihe von diesen in den Standard-Framework-Assemblies zum Behandeln einiger Standard-Token-Typen. Für REST-Service, ist die JSON Web Token ein beliebtes Format, und es gibt ein NuGet Paket einen Handler für die hier
https://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/
Wenn Sie einen anderen Token-Typen enthält, verwenden, können Sie Ihre eigenen Handler schreiben (es ist in der Tat nicht schwierig) oder versuchen, im Internet zu finden.
In .Net 4.5 verfügt die Klasse SecurityTokenHandler
über eine WriteToken(SecurityToken)
-Methode, die das Token als Zeichenfolge zurückgibt. In früheren Versionen von WIF wurde nur die XML-Version von WriteToken unterstützt.
In einigen Beispielen wird gezeigt, wie der SecurityTokenHandler für REST-Dienste auf der Serverseite verwendet wird. Ein gutes Beispiel ist hier
http://code.msdn.microsoft.com/AAL-Native-App-to-REST-de57f2cc/view/Discussions#content
Alle relevanten Code wird in der global.asax.cs Datei enthalten.
, wie man es anschließt und WEB-API aufruft ..... konnten Sie ein Beispiel zur Verfügung stellen .... oder Beispielcode? –
Könnten Sie bitte auch ein Beispiel für den Aufruf der gleichen mit JavaScript (Wie können wir anhängen Token in diesem Fall), auch aus Ihrer Antwort ist es nicht klar, was sollte die Config/Code auf der Service-Seite sein .....? –
auch am Dienstende, wie man die Elemente des claimset wie emailid, userid etc .... sieht, der normalerweise während des Generierens der Ansprüche von st hinzugefügt wird. –