Domanda

Descrizione Generale

Ho implementato un OP (OpenID Provider), utilizzando DotNetOpenAuth.Io sono prove contro di esempio RPs (contando le parti), come Drupal OpenID login e la OpenIdRelyingPartyWebForms progetto in DotNetOpenAuth s Samples soluzione.

Il problema è che, per quanto posso dire, quando un browser rimbalza contro la mia OP e invia un "successo" autenticazione richiestamode: id_res, claimed_id: smth, etc.) torna a RP, RP non tenta di eseguire un server-side richiesta per l'OP e chiedere se, in realtà, ha autenticato l'utente.Vedo che c'è un openid.sig firma restituito dall'OP, ma di nuovo, non vedo come il RP potrebbe verificare, dal momento che non si scambiano le chiavi con l'OP.

Quindi la domanda è: C'è qualche impostazione del po lato che posso attivare per rendere il flusso di lavoro sicuro?

Dettagli Tecnici

Sto usando Wireshark per sniffare il traffico HTTP in RP lato.Non c'è HTTPS, così posso vedere e leggere tutti i messaggi.Qui di seguito potete vedere cosa succede esattamente. B = Browser, OP = OpenID Provider, RP = Relying Party.I nomi a dominio vengono sostituiti con *.example.com.

  1. (B –> RP) Utente tenta di visitare soci risorsa relying party.Ha ingressi OP endpoint che il browser invia il RP.

    openid_identifier: http://OP.example.com/OpenId/Provider.aspx?xrds

  2. (RP –> OPZIONI –> RP) RP problemi di server-side richiesta per la mia OP che restituisce un XRDS documento.Non trovo nulla di simile a chiave segreta scambio qui.

    <?xml version="1.0" encoding="UTF-8"?>
    <xrds:XRDS
        xmlns:xrds="xri://$xrds"
        xmlns:openid="http://openid.net/xmlns/1.0"
        xmlns="xri://$xrd*($v*2.0)">
        <XRD>
            <Service priority="10">
                <Type>http://specs.openid.net/auth/2.0/server</Type>
                <Type>http://openid.net/extensions/sreg/1.1</Type>
                <URI>http://OP.example.com/OpenId/Provider.aspx</URI>
            </Service>
        </XRD>
    </xrds:XRDS>
    
  3. (RP –> B –> OP) Relying party 302-reindirizza l'utente a OP s /OpenId/Provider.aspx?[params] URL, dove i parametri sono i seguenti:

    openid.claimed_id: http://specs.openid.net/auth/2.0/identifier_select
    openid.identity: http://specs.openid.net/auth/2.0/identifier_select
    openid.assoc_handle: {634730422000625000}{jkQC1Q==}{32}
    openid.return_to: http://RP.example.com/login.aspx?ReturnUrl=%2FMembersOnly%2FDefault.aspx&dnoa.receiver=ctl00_Main_OpenIdLogin1&dnoa.UsePersistentCookie=Session&dnoa.userSuppliedIdentifier=http%3A%2F%2FOP.example.com%2FOpenId%2FProvider.aspx%3Fxrds
    openid.realm: http://RP.example.com/
    openid.mode: checkid_setup
    openid.ns: http://specs.openid.net/auth/2.0
    openid.ns.sreg: http://openid.net/extensions/sreg/1.1
    openid.sreg.policy_url: http://RP.example.com/PrivacyPolicy.aspx
    openid.sreg.required: email,gender,postcode,timezone
    
  4. (OP –> B –> RP) Fornitore di autentica l'utente e il 302-redirect per le RP con i seguenti parametri URL:

    ReturnUrl: /MembersOnly/Default.aspx
    dnoa.receiver: ctl00_Main_OpenIdLogin1
    dnoa.UsePersistentCookie: Session
    dnoa.userSuppliedIdentifier: http://OP.example.com/OpenId/Provider.aspx?xrds
    openid.claimed_id: http://OP.example.com/OpenId/User.aspx/2925
    openid.identity: http://OP.example.com/OpenId/User.aspx/2925
    openid.sig: pWJ0ugjQATKGgRSW740bml9LDsSxFiJ+a9OLO6NlsvY=
    openid.signed: claimed_id,identity,assoc_handle,op_endpoint,return_to,response_nonce,ns.sreg,sreg.nickname,sreg.email
    openid.assoc_handle: {634730422000625000}{jkQC1Q==}{32}
    openid.op_endpoint: http://OP.example.com/OpenId/Provider.aspx
    openid.return_to: http://RP.example.com/login.aspx?ReturnUrl=%2FMembersOnly%2FDefault.aspx&dnoa.receiver=ctl00_Main_OpenIdLogin1&dnoa.UsePersistentCookie=Session&dnoa.userSuppliedIdentifier=http%3A%2F%2FOP.example.com%2FOpenId%2FProvider.aspx%3Fxrds
    openid.response_nonce: 2012-05-19T16:40:11ZSfsL4BK1
    openid.mode: id_res
    openid.ns: http://specs.openid.net/auth/2.0
    openid.ns.sreg: http://openid.net/extensions/sreg/1.1
    openid.sreg.nickname: user@OP.example.com
    openid.sreg.email: user@OP.example.com
    
  5. (RP –> OP) Il RP esegue un lato server HTTP di richiesta per l'OP.Non ci sono dati trasferiti, a richiesta GET precedentemente acquisiti utente URL di identità.Perché fare questa richiesta a tutti, a proposito?

    GET /OpenId/User.aspx/2925 HTTP/1.1
    
  6. (OP –> RP) L'OP risponde con un altro XRDS documento:

    <xrds:XRDS
        xmlns:xrds="xri://$xrds"
        xmlns:openid="http://openid.net/xmlns/1.0"
        xmlns="xri://$xrd*($v*2.0)">
        <XRD>
            <Service priority="10">
                <Type>http://specs.openid.net/auth/2.0/signon</Type>
                <Type>http://openid.net/extensions/sreg/1.1</Type>
                <URI>http://OP.example.com/OpenId/Provider.aspx</URI>
            </Service>
            <Service priority="20">
                <Type>http://openid.net/signon/1.0</Type>
                <Type>http://openid.net/extensions/sreg/1.1</Type>
                <URI>http://OP.example.com/OpenId/Provider.aspx</URI>
            </Service>
        </XRD>
    </xrds:XRDS>
    
  7. (RP –> B) Che è.L'utente è autorizzato e RP mostra a lui i soli soci di risorse.

È stato utile?

Soluzione

RPs in grado di operare in stateful o stateless modalità (noto anche come intelligente e stupido modalità, rispettivamente).Check out di rete, diagrammi di flusso per ogni.

C'è un momento di scambio di chiavi tra RP e OP, a condizione che il RP è operativo in modalità stateful.Se in modalità stateless, vedrete un messaggio da RP OP dopo ogni autenticazione per verificare l'affermazione della firma.

Per quanto riguarda la tua domanda #5 (HTTP TESTA di richiesta alla presunta identifier) è il DotNetOpenAuth RP verifica che l'OP è autorevole per l'identità si sta affermando.Dato che in precedenza aveva tirato questo URL, la cache a calci e evita il contenuto di trasferimento.

Altri suggerimenti

Mi sento stupido ora, mi sono perso qualcosa di fondamentale—ci è uno scambio di chiavi tra RP e OP, ma succede solo una volta, e quindi la chiave è nella cache su entrambi i lati per qualche tempo.

Quindi il mio attuazione di OpenID provider si rivelasse essere sicuro :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top