1. Здравствуйте
    Пытаюсь реализовать аутентификацию пользователей моего приложения через google openid +oAuth для доступа к google doc.

    Далаю это следующим образом
    # Create your views here.
    import urllib
    from django.http import HttpResponseRedirect
    from django.shortcuts import render_to_response
    from openid.consumer.consumer import Consumer
    from util import normalDict, getOpenIDStore

    return_to='http://127.0.0.1:8000/finish/'


    def indexView(request):
    consumer=Consumer(request.session,getOpenIDStore())
    openIdRequest=consumer.begin('google.com/accounts/o8/id')
    redirect=openIdRequest.redirectURL('http://127.0.0.1:8000/',return_to)
    OAuthExtension={
    'openid.ns.ext2': 'http://specs.openid.net/extensions/oauth/1.0',
    'openid.ext2.consumer': '127.0.0.1',
    'openid.ext2.scope': 'https://mail.google.com/mail/feed/atom',
    }
    redirect+='&'+urllib.urlencode(OAuthExtension)
    print(redirect)
    return HttpResponseRedirect(redirect)


    def finishView(request):
    request_args = normalDict(request.GET)
    if request.method == 'POST':
    request_args.update(normalDict(request.POST))
    consumer=Consumer(request.session,getOpenIDStore())
    response = consumer.complete(request_args,return_to)
    print (response)
    return render_to_response("myindex.html")
    В результате аутентификация проходит успешно, но выводятся ошибки:
    Error attempting to use stored discovery information: <openid.consumer.consumer.TypeURIMismatch: Required type http://specs.openid.net/auth/2.0/signon not found in ['http://specs.openid.net/auth/2.0/server', 'http://openid.net/srv/ax/1.0', 'http://specs.openid.net/extensions/ui/1.0/mode/popup', 'http://specs.openid.net/extensions/ui/1.0/icon', 'http://specs.openid.net/extensions/pape/1.0'] for endpoint <openid.consumer.discover.OpenIDServiceEndpoint server_url='https://www.google.com/accounts/o8/ud' claimed_id=None local_id=None canonicalID=None used_yadis=True >>
    Attempting discovery to verify endpoint
    Performing discovery on https://www.google.com/accounts/o8/id?id=AItOawn25vnou1SBE-C5KfmuKgkZK-RPnhASUNE
    Received id_res response from https://www.google.com/accounts/o8/ud using association AOQobUdnvT-1AbfoJEuWTy-HS7kYEMp8MBy43L9_aD4EfjcP0Hot-ioa
    <openid.consumer.consumer.SuccessResponse id='https://www.google.com/accounts/o8/id?id=AItOawn25vnou1SBE-C5KfmuKgkZK-RPnhASUNE' signed=[u'openid.op_endpoint', u'openid.claimed_id', u'openid.identity', u'openid.return_to', u'openid.response_nonce', u'openid.assoc_handle']>
    [28/Mar/2011 23:43:02] "GET /finish/?janrain_nonce=2011-03-29T04%3A43%3A00Z0Hlj7X&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fud&openid.response_nonce=2011-03-29T04%3A41%3A31ZucVBKXIE0I8lUw&openid.return_to=http%3A%2F%2F127.0.0.1%3A8000%2Ffinish%2F%3Fjanrain_nonce%3D2011-03-29T04%253A43%253A00Z0Hlj7X&openid.assoc_handle=AOQobUdnvT-1AbfoJEuWTy-HS7kYEMp8MBy43L9_aD4EfjcP0Hot-ioa&openid.signed=op_endpoint%2Cclaimed_id%2Cidentity%2Creturn_to%2Cresponse_nonce%2Cassoc_handle&openid.sig=O%2FHWaJvWFUOw0Knx%2FefAXnG4XvY%3D&openid.identity=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3DAItOawn25vnou1SBE-C5KfmuKgkZK-RPnhASUNE&openid.claimed_id=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3DAItOawn25vnou1SBE-C5KfmuKgkZK-RPnhASUNE HTTP/1.1" 200 176
    И в ответе сервер не возвращает
    openid.ext2.request_token
    Из-за чего это может быть?
    Так же подскажите более корректный способ установки атрибутов openid.ext, что бы не использовать такой хак:
    OAuthExtension={
    'openid.ns.ext2': 'http://specs.openid.net/extensions/oauth/1.0',
    'openid.ext2.consumer': '127.0.0.1',
    'openid.ext2.scope': 'https://mail.google.com/mail/feed/atom',
    }
    redirect+='&'+urllib.urlencode(OAuthExtension)
    Приведите какие-нибудь примеры кода или готовые библиотеки где реализована связка openid + oauth.

    Заранее благодарен
  2. Ivan Sagalaev

    29.03.2011

    0 ↑
    0 ↓

    Ох, не думаю, что этим кто-то подробно занимался.

  3. Зачем использовать такие длинные ссылки типа: http://www.google.com/accounts/o8/id?id=AItOawmEBxlhvOPYD72PjCTrqauy6wM22jVLwDk.
    Когда есть такие, например мой OpenID: https://profiles.google.com/Sintsov.Denis

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.