Soru OpenID kullanarak Google'ın dostu adı?


Google OpenID sağlayıcısıyla ping pong oynadığımda, arkadaş isminin / takma adın / kullanıcı adının (ne demek istediğimi) alamıyorum.

Aşağıdakine benzer bir şey görüyorum:

www.google.com/accounts/o8/id?id=AItOawmtAnQvSXGhRTkAHZWyxi4L4EKa7xoTT1dk  

hoş bir şey yerine

JohnDoe

Kullanıcının adını Google'dan almak için hoş bir şekilde söyleme protokolü nedir, örneğin miyopenid?

** DotNetOpenAuth kullanıyorum *


17
2017-08-31 00:14


Menşei




Cevaplar:


Yapamazsın. OP konularının kesin olarak OP'ye ait olduğu tanımlayıcısı. RP'nin gerçekten hiç bir sözü yok. Şimdi, bazı OP'ler takma ad, e-posta adresi, vb. Gibi giriş bilgileri sunmayı desteklemektedir. Google, yalnızca e-posta adresi sunarak bunlara çok az destek sunmaktadır.

Google, bir bilgi ifşa riski olduğundan, kullanıcı tanınabilir tanımlayıcıları yayınlamamayı seçmiştir. Yahoo, kullanıcılara aralarından seçim yapabileceği, hem insan dostu hem de insan dostu olmayan tanımlayıcılar sunarak her iki yola da gitti. MyOpenID ve diğer OP'ler genellikle OP'ye kaydolduklarında kullanıcının seçtiği kullanıcı dostu bir tanımlayıcı ile gider.

Kullanıcınıza giriş yaptıklarında kullanıcıya gösterilecek daha samimi bir dize almak için RP'de özel durum Google'ı isteyebilir veya Google bunu yapan tek kişi olmadığı için, tanımlayıcının ne zaman olduğunu öğrenmek için kod yazabilirsiniz. okunamayan ve kullanıcı için daha kolay bir şeyler göstermesi için giriş yaptıkları (belki de e-posta adresleri veya sitenizde seçtikleri bir takma ad).

Dikkat: Bir Google sorunundan daha samimi bir tanımlayıcı göstermeyi seçerseniz, Resmi Talep Edilen Tanımlayıcıyı kullanmaya devam etmeli Google’a geçtiğiniz kullanıcının resmi kullanıcı adı için FormsAuthentication.RedirectFromLogin ve veritabanınızda kullanıcı adı araması için. Bir araya getirdiğiniz başka bir şey genellikle güvenlik riskleri getirir.


13
2017-08-31 00:45



Netleştirdiğiniz için teşekkürler. Kullanıcının e-postası çalışabileceğinden varsayılan bir dostu tanımlayıcı kullanıyorum. Başka hangi hizmetlerin arkadaşça isimlerle ilgili olarak iyi oynamadıklarını biliyor musunuz? - MunkiPhD
Yahoo bildiğim tek şeydir ve sadece bu davranış bazen vardır. - Andrew Arnott
Andrew, blog yazılarına daha derin girmeyi başardım ve Yahoo'yla ilgili olanı buldum. Bunu tam olarak anlayabilmek için tekrar okumalıyım - ama bilmeden yaptığım denemelerle Yahoo'dan geri e-posta adresi bile alamıyordum. . - MunkiPhD


Roy cevabı üzerine üs, ben aynı isteği kullanarak yapmaya çalıştım DotNetOpenAuth ve iyi çalıştı. talep:

var req = openid.CreateRequest("https://www.google.com/accounts/o8/id");
var fetch = new FetchRequest();
fetch.Attributes.Add(new AttributeRequest(WellKnownAttributes.Contact.Email,true));
fetch.Attributes.Add(new AttributeRequest(WellKnownAttributes.Name.First,true));
fetch.Attributes.Add(new AttributeRequest(WellKnownAttributes.Name.Last,true));

req.AddExtension(fetch);

not: emin olun ikinci parm AttributeRequest kurucu true olarak ayarlanmıştır.

Cevap kısmı düz ileri.

var openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
var fetch = response.GetExtension<FetchResponse>();
if (fetch != null) {
IList<string> emailAddresses =fetch.Attributes[WellKnownAttributes.Contact.Email].Values;
IList<string> firstNames = fetch.Attributes[WellKnownAttributes.Name.First].Values;
IList<string> lastName = fetch.Attributes[WellKnownAttributes.Name.Last].Values;
}

10
2018-04-27 16:21



Bunu nasıl kullandığınıza bağlı olarak (OWIN kullanıyorum) projenizde yüklü olan şeylerin kümesinde WellKnownAttributes bulunmayabilir ve muhtemelen bunun için DotNetOpenAuth'ı eklemek istemezsiniz. İşte WellKnownAttributes (ve diğer OpenId libs başka yerlerde) OpenId dizeleri: ad: "given_name", soyadı: "family_name", orta ad: "middle_name", takma: "takma ad" - Chris Moschini


2012 itibariyle, öyle görünüyor ki Google OpenID son noktası Attribute Exchange protokolü aracılığıyla ad ve soyad alma özelliğini destekler. İşte bazı örnek Python kodu kullanarak Piramit web çerçevesi ve Janrain'in piton-Openid paketi.

from openid.consumer import consumer
from openid.extensions.ax import AttrInfo, FetchRequest, FetchResponse
from openid.store.filestore import FileOpenIDStore
from openid.store.sqlstore import PostgreSQLStore, MySQLStore, SQLiteStore

AX_FIRSTNAME = 'http://axschema.org/namePerson/first'
AX_LASTNAME = 'http://axschema.org/namePerson/last'
AX_EMAIL = 'http://axschema.org/contact/email'

@view_config(route_name='openID_start', permission=NO_PERMISSION_REQUIRED)
def start(request):
    'Start openID authentication process'
    params = request.params
    openIDURL = params.get('openIDURL')
    if not openIDURL:
        return HTTPResponse('Parameter expected: openIDURL')
    openIDConsumer = get_consumer(request)
    try:
        openIDRequest = openIDConsumer.begin(openIDURL)
    except consumer.DiscoveryFailure, error:
        return HTTPResponse('Discovery failed: %s' % escape(error))
    else:
        if not openIDRequest:
            return HTTPResponse('Not an openID provider: %s' % escape(openIDURL))

        axRequest = FetchRequest()
        axRequest.add(AttrInfo(AX_FIRSTNAME, required=True))
        axRequest.add(AttrInfo(AX_LASTNAME, required=True))
        axRequest.add(AttrInfo(AX_EMAIL, required=True))
        openIDRequest.addExtension(axRequest)

        sourceURL = request.host_url
        targetURL = request.route_url('openID_finish')
        if openIDRequest.shouldSendRedirect():
            return HTTPFound(location=openIDRequest.redirectURL(sourceURL, targetURL))
        return HTTPResponse(openIDRequest.htmlMarkup(sourceURL, targetURL))

@view_config(route_name='openID_finish', permission=NO_PERMISSION_REQUIRED)
def finish(request):
    'Finish openID authentication process'
    openIDConsumer = get_consumer(request)
    targetURL = request.route_url('openID_finish')
    openIDResponse = openIDConsumer.complete(request.params, targetURL)
    html = openIDResponse.status + '<br>'
    for key, value in openIDResponse.__dict__.iteritems():
        html += '%s: %s<br>' % (escape(key), escape(value))
    html += '<br>'
    if consumer.SUCCESS == openIDResponse.status:
        axResponse = FetchResponse.fromSuccessResponse(openIDResponse)
        html += 'First name: %s<br>' % escape(axResponse.get(AX_FIRSTNAME))
        html += 'Last name: %s<br>' % escape(axResponse.get(AX_LASTNAME))
        html += 'Email: %s<br>' % escape(axResponse.get(AX_EMAIL))
    return HTTPResponse(html)

def get_consumer(request):
    try:
        openIDStore = {
            'sqlite': SQLiteStore,
            'postgresql': PostgreSQLStore,
            'mysql': MySQLStore,
        }[db.bind.name](db.bind.raw_connection())
    except KeyError:
        openIDStore = FileOpenIDStore('data/openIDs')
    try:
        openIDStore.createTables()
    except:
        pass
    return consumer.Consumer(request.session, openIDStore)

6
2018-02-02 18:42



Bomba gibi çalışır. / namePerson / first ve / namePerson / last - Spider