2011-01-17 16 views
0

私はいくつかの時間前にOpenID認証を実装していると私は(DotNetOpenAuthの面で)ClaimedIdentifierを使用し、ユーザーを覚えておくこと - 認証後OpenIDプロバイダによって返された文字列を。のOpenID認証の脆弱性

しかし、突然、私は、このソリューションは、脆弱性を持って理解していました。ユーザ1に識別された "identifier1"を返すOpenIdプロバイダ1があるとしましょう。今私がこの識別子を知っていれば、カスタムOpenIdプロバイダを起動して同じ識別子を返すことができるので、ユーザ1の下でログインすることができます。

今私はopenid_identifier(OpenIDプロバイダのURL)+ ClaimedIdentifierを格納考えています。

は、私は右の私の考えでいるだろうか?私は他の可能性のある脆弱性を見逃していませんか?

答えて

2

あなたが考えてきた。この脆弱性は、実際には、脆弱性ではありません。 OpenIDプロトコル自体(したがってDotNetOpenAuthライブラリ)は、所有していない識別子をアサートする任意のOpenIDプロバイダに対する保護を含みます。したがって、OpenIDプロバイダのURLと同じ名前のOPエンドポイントをClaimed Identifierと一緒に保存する必要はありませんが、そうした場合、OpenIDの柔軟性が失われます。

あなたは、この時点で尋ねるすることができるので、どのようにそれは、動作しますか?なぜこれは脆弱性ではありませんか?
回答は、プロバイダー(OP)が依拠当事者(RP)に主張識別子を主張するたびに、RPはOPを信頼するだけではないという事実から来ています。あなたが言ったように、誰でも任意のOPを設定できるので、OPを信頼する理由はありません。代わりに、RPは主張された識別子を取り、その識別子を発見します。基本的にRPは、主張された識別子に「OP foo.comはあなたの身元を主張する権限を持っていますか?」と尋ねています。特定の主張された識別子に対する真のOPのみが、この質問に対して識別子が "はい"となるようにすることができます。 「いいえ」と応答すると、RPはアサーションを拒否し、ユーザに認証中にエラーが発生したことを通知します。