2011-01-17 7 views
1

Ich verwende dotnetopenauth und ich frage mich, was ich von beanspruchteIdentifier speichern sollte. Ich dachte, es wäre nur eine ID, aber es scheint auch eine URL zu haben.Wird der gesamte ClaimedIdentifier gespeichert?

Wenn ich etwas tun, wie

Identifier claimedIdentifier = openIdRelayingParty.ClaimedIdentifier; 

ich

// yahoo

https://me.yahoo.com/a/2RCv_bQ7341PA3v4irf5tzu_9K_fF1414afa414 

// google

https://www.google.com/accounts/o8/id?id=AItOawmMvmoomT7lOO5jwEaAd1414dfafaf241VUI 

So tun Ich speichere diese ganze Sache oder nur die lange Schnur? Wenn ich die lange Schnur speichern soll, wie kann ich sie herausziehen? Es sieht so aus, als ob die Formatierung jedes Providers ein bisschen anders ist.

+0

Ich bin nicht vertraut mit DotNetOpenAuth, aber was meinst du mit "lange Zeichenfolge" vs "ID" vs. "URL"? In OpenID ist der Bezeichner * * eine URL (deren Format für jeden Provider spezifisch ist) – Cameron

+0

ya ich denke ich meine ID. Ich nannte es einfach eine lange Zeichenfolge, den ID-Teil, weil Yahoo es nicht wirklich als ID in ihrer URL bezeichnet. Also sollte ich die gesamte URL speichern? – chobo2

Antwort

3

Sie sollten die gesamte URL einschließlich des Fragments Teil speichern. Der Fragmentteil ist das #fragment am Ende einiger URLs. Zum Beispiel, ich glaube, jeder Yahoo ClaimedIdentifier enthält tatsächlich ein Fragment wie folgt aus:

https://me.yahoo.com/a/2RCv_bQ7341PA3v4irf5tzu_9K_fF1414afa414#aHd88

es von entscheidender Bedeutung ist, dass die gesamte ClaimedIdentifier gespeichert und später verwendet, um die gleiche Person zu identifizieren. Stellen Sie außerdem sicher, dass Ihre Identitätsprüfung case sensitive ist. Verwenden Sie nicht Verwenden Sie die System.Uri.Equals Methode, um zu überprüfen, dass zwei ClaimedIds gleichwertig sind. Es würde true in Fällen zurückgeben, in denen nur das #fragment anders ist, das nicht korrekt ist. Sie sollten Identifier.Equals oder die einfache String.Equals(string, string, StringComparison.Ordinal) Methode verwenden.

Oder wenn Sie den Benutzer aus Ihrer Benutzertabelle in einer Datenbank nachschlagen, stellen Sie sicher, dass Ihre Benutzertabelle so konfiguriert ist, dass Groß- und Kleinschreibung in der ClaimedId-Spalte berücksichtigt wird.

+0

Wie wäre es, wenn Sie einen Orm Mapper wie Nhibernate verwenden (es erzeugt die Datenbank für mich). Ich bin mir nicht ganz sicher, wie ich es sagen soll, eine Groß-/Kleinschreibung zu beachten. Ich würde annehmen, ich würde einfach nehmen, was ich bekomme und etwas tun wie wo (u => u.OpenId == ClaimedIdentifer) .FirstOrDefault() – chobo2

+1

Das hängt völlig von der ORM Sie verwenden und was seine Regeln sind. Ein gutes ORM übersetzt Ihre Lambda-Abfrage, die Sie in Ihrem Beispiel angegeben haben, zu einer SQL-Abfrage. Das macht es der SQL-Engine aus, zu bestimmen, ob die Groß-/Kleinschreibung beachtet werden soll, was natürlich in Abhängigkeit von dem Schema, das das ORM beim Erstellen der Datenbank ursprünglich verwendet hat, geschehen wird. Sie müssen in der ORM-Dokumentation nachsehen, wie Sie sicherstellen, dass eine Spalte die Groß- und Kleinschreibung berücksichtigt. Das Testen sollte einfach sein. Schreiben Sie Code, der nicht übereinstimmen sollte, aber nur in Groß- und Kleinschreibung unterscheidet und sehen Sie, ob es funktioniert. –