2012-03-30 4 views
0

Ich versuche, die Authentifizierung mit oAuth und DotNetOpenAuth dafür zu implementieren.Autorisieren Sie die Anfrage zwischen Web-Services durch Single Access Token mit DotNetOpenAuth

Wir haben mehrere REST-Webdienste, um die Projektanforderungen zu erfüllen. Es gibt einen Authentifizierungsservice, einen Kundendienst, einen Bestellservice usw.

Der Verbraucher authentifiziert die Benutzer, die diesen Dienst nutzen, und erhält Zugangstoken von diesem. Jetzt wird Consumer eine Methode für den Kundendienst verwenden und das Access-Token übergeben.

Der Kundendienst möchte nun das Zugangs-Token vom Authentifizierungs-Service validieren.

Ich habe versucht, Authorization Header von Consumer in Customer Service erfasst und versucht, dies an den Authentifizierungsdienst von Customer Service übergeben, aber es "Signatur nicht gültig" Fehler, der richtig scheint, weil der URI von Verbraucher verwendet, um die Signatur zu erstellen ist Kundenservice, aber während dies in der tatsächlichen Anfrage des Authentifizierungsdienstes bestätigt wird, kommt er vom Kundenservice, der ein anderer ist.

Ich hoffe, ich kann das Problem erklären.

Wie kann ich dieses Problem lösen?

Antwort

1

Ich nehme an, dass Sie OAuth 1.0 verwenden. Und es scheint, als würden Sie die OAuth-Autorisierung vom Kundendienst an den Authentifizierungsdienst so weiterleiten, dass der Authentifizierungsdienst davon ausgeht, dass das Token für es anstelle des Kundendienstes vorgesehen war. Wenn dies der Fall ist, ist diese ungültige Signatur beabsichtigt, weil Sie effektiv (und versehentlich) einen Angriff ausführen, bei dem ein MITM das Token an einen anderen Dienst weiterleitet.

Jeder Dienst muss das Zugriffstoken für sich selbst überprüfen - es kann es nicht an einen anderen Dienst weiterleiten. Jeder Dienst kann dies tun, indem er die Datenbank ITokenManager mit dem Authentifizierungsdienst teilt.

+0

Ich möchte Token-Datenbank nicht zwischen Dienst teilen. So, jetzt, hier ist was ich versuche zu tun. Ich habe jedem Web-Service einen Schlüssel und ein Geheimnis zugewiesen. Beim Anwendungsstart authentifiziert sich der Web-Service selbst. Der Verbraucher sendet Access_token und seinen Kundenschlüssel an den Kundendienst, der daraufhin den Authentifizierungsdienst aufruft, um das Zugangstoken und den Schlüssel des Verbrauchers zu überprüfen. – Lalit

+0

Customer Service Authentifizierung bei Application_Start funktionierte, wenn ich mit WebDev Server unter IDE getestet, aber beim Hosten in IIS 7 fehlgeschlagen und Fehler "Antwort ist in diesem Kontext nicht verfügbar" zurückgegeben. Ich habe versucht, diesen Code in Application_BeginRequest zu verschieben, damit ich den Dienst für den Anruf authentifizieren kann, wenn dies nicht bereits der Fall ist. Aber das ist auch gescheitert. Irgendeine Hilfe, wie kann ich das tun? – Lalit

+0

Ich folge Ihrem neuen Design nicht. Wenn Sie Ihre Tokendatenbank jedoch nicht freigeben möchten, sollten Sie OAuth 2 in Betracht ziehen, das dieses Szenario unterstützt. –