2009-09-07 2 views
4

로그인 프로세스의 일부로 로그인하려면 DotNetOpenAuth를 사용하고 있습니다. 그것은 인증 처리에 훌륭하게 작동하지만 다양한 openId 공급자로부터 사용자 정보를 검색하는 프로세스가 잘 작동하지 않습니다.공급자 간 OpenId 사용자 정보 (클레임) 검색

MyOpenId를 사용하여 DotNetOpenAuth를 사용하여 ClaimsRequest를 사용하여 요청한 전체 정보를 얻습니다. 분명히 SREG 프로토콜을 사용하여이 내용을 요청하고 검색합니다. 이 기능은 MyOpenId와 잘 작동하지만 Google이나 Yahoo! 및이 프로토콜을 지원하지 않는 다른 제공 업체 (아직?)는 아무 것도하지 않습니다.

DotNetOpenAuth (또는 RPX 이외의 다른 메커니즘을 사용하여 교차 공급자 정보를 검색하는 방법이 있습니까? (중간에 다른 사람을 찾지 않습니다 : -)))?

+0

나는 "SIG"프로토콜이 있다고 생각하지 않습니다. SREG (단순 등록) 및 AX (속성 교환)가 있습니다. –

+0

죄송합니다. SREG : -}. 업데이트 된 질문. –

답변

2

실제 발생한 교류를 살펴 보는 것이 좋습니다. 나는. 서비스가 사용자를 공급자로 리디렉션 할 때 전송되는 매개 변수를 찾은 다음 사용자가 다시 돌아올 때 어떤 매개 변수가 전송되는지 확인합니다.

OpenID 2에는 사용자 정보를 요청하는 두 가지 방법 인 Attribute Exchange (AX) 및 Simple Registration (SREG)이 있습니다. SIG가 무엇인지 모릅니다. 공급자가 이러한 프로토콜을 구현하는지 여부와 제공하는 정보는 선택 사항입니다 (처음에는 사용자의 선택).

Google에서 AX를 지원하며 항상 이메일 주소와 사용자의 이름과 성을 제공하는 것으로 나타났습니다. 제 경험상 야후는 청구 된 ID 외에 아무것도 제공하지 않습니다. 결과적으로, 나는 공급자로 야후에 동의하지 여기에 매우 비슷한 질문에 대한 내 대답은 밖으로 http://pypi.python.org/pypi?:action=openid

+0

감사합니다. Google에서 AX를 사용하고 있음을 알면 도움이됩니다. 이제 값을 가져 오는 방법을 알아내는 것뿐입니다 (다시 돌아 오는 경우). 요청 데이터를 보았습니다. ClaimsRequest를 사용할 때 SREG 요청이 만들어지며 아마도 아무 것도하지 않습니다. 많은 것들이 돌아 왔지만 일반 데이터는 없습니다. SREG 값은 MyOpenId에서 돌아 왔을 때 일반 텍스트이며 수동으로 구문 분석하기도 쉽습니다. Google은 구문 분석 할 수있는 것처럼 보이지만 아무 것도 반환하지 않습니다. –

0

확인을 참조하십시오

Cannot get attributes from DotNetOpenId response

추가 : 여기에 내가 쓴 블로그 게시물입니다 주제에 대해서도. AXFetchAsSregTransform 비헤이비어를 작성하기 전에 필자가 작성 했으므로 일부는 블로그 게시물에 제시된 것보다 쉽습니다. 그러나 특히, Google은 "선택적"인 모든 속성 요청을 무시한다고 언급합니다. 따라서 전자 메일을 "필수"로 만들어야 만 전자 메일을받을 수 있습니다. 대한 명확한

http://blog.nerdbank.net/2009/03/how-to-pretty-much-guarantee-that-you.html

+0

Andrew, 고통스러운 설정 섹션입니다 : -}. 그것으로 시도해보십시오, 작동하도록 할 수 없었습니다 - config (null 객체 참조)에서 xri 프록시 설정에 대한 구성 오류로 폭발합니다. –

+0

야, 그 남자가 그의 질문에 넣은 * 전체 * 설정 섹션에 넣지 마라. 아래로 스크롤하여 내 대답을하고 그 아주 단순한 부분을 넣으십시오. (필요한 외부 태그 포함). 질문을 한 사람은 구성 참조 페이지를 잘못 해석하여 모든 것이 필수라고 생각했습니다. 확실히. 그것은 단지 포괄적 인 참조 일뿐입니다. –

+0

Andrew 여기에 Wiki 페이지의 config 섹션을 사용했습니다. 질문에 게시 된 코드가 아닙니다. http://dotnetopenauth.net:8000/wiki/CodeSnippets/Configuration 나는 무엇이 필요한지 잘 모릅니다. 선택적 요소는 무엇이며 종속 요소는 무엇입니까? : - : http://dotnetopenauth.net:8000/wiki/CodeSnippets/OpenIDRP/AXFetchAsSregTransform 를이 다소 더 잘 작동하는 것 같다} 나는 내가 여기에 필요한 것을 발견했다. 예를 들어 Google에서 이메일 주소를 얻을 수는 있지만 그 밖의 것은 없습니다. Google에서 이메일 및 성명 (또는 닉네임)을 검색 한 사람이 있습니까? –

1

나는 대답으로이 링크를 게시하도록하겠습니다 :

http://www.dotnetopenauth.net/developers/code-snippets/the-axfetchassregtransform-behavior/

가이 링크를 클릭하면 작은 구성 예에서 AXFetchAsSregTransform 행동에 대한 구성 파일 설정을 제공합니다 (앤드류에 의해 언급 한 바와 같이) ClaimsRequest()를 사용하여 SREG 정보와 AX 정보를 모두 가져올 수 있습니다.

이렇게하면 일부 (전부는 아님) 요청 정보를 검색 할 수 있습니다. Google의 경우 이메일 주소 검색과 함께 작동합니다. 그렇지 않으면 아무 것도 반환됩니다 구글은 이메일 주소를 데리러 보인다는 DemandLevel.Require을 필요로

var claim = response.GetExtension<ClaimsResponse>(); 
string email = null, fullname= null, password = null; 
if (claim != null) 
{ 
    email = claim.Email; 
    fullname = claim.FullName; 
} 

참고 :

var req = openid.CreateRequest(Request.Form["openid_identifier"]); 

var fields = new ClaimsRequest();      
fields.Email = DemandLevel.Require; 
fields.FullName = DemandLevel.Require; 

req.AddExtension(fields); 

return req.RedirectingResponse.AsActionResult(); 

응답을받을 :

는 요청을 만들려면 .