2009-05-27 6 views
13

ASP.net 사이트에서 OpenID를 사용하는 방법에는 여러 가지가 있지만 그 중 어느 것도 기존 멤버쉽 및 인증 공급자 메커니즘을 사용하는 것 같지 않습니다.ASP.net에서 "제대로"구현 - 회원 또는 인증 공급자?

전적으로 OpenID를 사용하는 사이트를 만드는 것이 적절한 방법일까요? 폼 인증을 계속 사용하지만 OpenID에 대한 조회를 수행하는 SqlMembershipProvider의 변형을 구현하고 있습니까?

아니면 한 단계 더 깊숙히 들어가서 내 FormsAuthenticationModule을 작성하겠습니까? 그게 너무 조금 베어 본 것 같아요, (내 지식) 양식 인증은 모든 데이터 소스에 대한 조회 수 있습니다.

FormsAuthenticationModule을 유지하면서 OpenID에 대한 조회를 만드는 세 번째 방법이 있습니까?

이것은 ASP.net MVC 응용 프로그램 용이므로 차이가 나는 경우 기본 제공 로그인 WebForms 컨트롤을 사용하지 않습니다.

답변

10

ASP.NET에서 정의한 멤버쉽 API는 OpenID와 전혀 맞지 않습니다. 아마도이 API를 사용하는 시스템이 많이 보이지 않을 것입니다. 아직 OpenID로 회원 공급자를 사용할 필요가 없으므로 실제로 문제가되지 않습니다. OpenID에 맞게 멤버쉽 모델을 만들려고 한 프로젝트는 http://code.google.com/p/dotnet-membership-provider/이지만 최근에 유지 관리 된 것처럼 보이지 않습니다.

위와 같이 FormsAuthenticationModule을 다시 실행할 필요가 없습니다. 그것은 OpenID와 완벽하게 잘 작동합니다.

과 함께 제공되는 project templates을 확인하십시오. 멤버 자격 공급자없이 작동하는 방법을 확인하십시오.

+0

투표 OpenID와 함께 작동하는 더 나은 멤버쉽 인터페이스를 위해 : http://aspnet.uservoice.com/forums/41199-general/suggestions/486926-new-membership-provider-interface-supporting-redir –

0

DotNetOpenId에 포함 된 ASP.NET MVC 샘플은 FormsAuthentication을 사용하여 사용자가 OpenID에 의해 인증 된 후 사용자를 기록합니다. 제가 말할 수있는 한 회원 시스템과의 통합은하지 않습니다.

4

OpenID Membership Provider 프로젝트가 당신이 찾고있는 것일 수도 있습니다.

로그인 컨트롤을 사용하지 않더라도 인증을 위해 회원 공급자 모델을 활용하는 것이 좋습니다.

일반적으로 FormsAuthentication 특정 기능을 구현하는 것만 큼 깊지는 않습니다. MembershipProvider를 작성하는 것은 매우 간단하고 처리하기에 충분히 유연하지 않은 경우를 찾지 못했습니다. 작동하는 제공자를 얻으려면 인터페이스의 한 가지 메소드 (ValidateUser()) 만 구현하면됩니다.

+4

이 프로젝트가 OpenID 라이브러리의 * 아주 * 오래된 버전을 사용하고 있으며 최신 버전 (http://dotnetopenid.googlecode.com/에서 사용할 수있는 DotNetOpenAuth)으로 업그레이드하지 않고 사용하는 것이 바람직하지 않음을 유의하십시오. –

0

누구든지 좋은 C# janrain 예를 발견하면 알려 주시기 바랍니다.

dsn이 tumblr을 가리키고 있는데 로그인 위젯의 경우 루트 아래에있는 폴더의 경로가있는 하위 도메인으로 돌아옵니다.

그렇다면이 C# 도우미 클래스를 사용하는 app_code 폴더가 있습니다. 토큰을 다시 가져올 수 있으며, 위젯이 작동하기 위해 내 members.domain.com으로 이동합니다. 회원 영역에 도착하기 위해 사용했던 제공 업체에 대한 사용자 세부 정보를 얻으십시오.

http://groups.google.com/group/rpx-developers/web/c-helper-class?_done=/group/rpx-developers%3F

은 '/'응용 프로그램에 헬퍼 클래스

오류

서버 오류입니다. 예기치 않은 API 오류 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.

예외 정보 : System.Exception : 예기치 않은 API 오류

소스 오류 :

행 22 : 행 23 : RPX의 feedit = 새로운 RPX ("apiKey에", "https://learnbartending.rpxnow.com/"); 줄 24 : feedit.AuthInfo (justoken); 줄 25 : XmlElement xmlstuff = feedit.AuthInfo (justoken); 행 26 :

소스 파일 : C : \를 Inetpub \ 가상 호스트 \ learnbartending.com \ httpdocs 회원 \이하여 default.aspx.cs 라인 \ : 24

스택 추적 :

0

을 확인해 때 처음 로그인, 일 후속 로그인시 새 비밀번호를 돌리는 메커니즘을 찾아야합니다. 이 암호는 회원 공급자에게 분명히 공개되며 투명합니다.

재미있는 부분은 일반적인 메타 데이터를 찾는 것입니다. HMM 전자 메일 주소가 어쩌면?

나는 facebook connect와 함께이 딜레마에 대해서도 연구 중이다. 내 데이터베이스의 분류 된 게시물에 사용자 ID를 연결해야합니다.

재미있는 것들.

업데이트 만. 나는이 일을 훌륭하게 해냈다.

나는 페이스 북이나 오픈 ID에 대한 테이블

CREATE TABLE [dbo].[OAuthUsers] 
(
    [OuthUserID] [int] IDENTITY(1,1) NOT NULL, 
    [UserID] [uniqueidentifier] NOT NULL, 
    [access_token] [varchar](150) NULL, 
    [expires_in] [datetime2](7) NULL, 
    [refresh_token] [varchar](150) NULL, 
    [issued_at] [datetime2](7) NULL, 
    [user_id] [varchar](50) NOT NULL, 
    [domain] [varchar](50) NULL, 
    [scope] [varchar](150) NULL, 
    CONSTRAINT [PK_OAuthUsers] PRIMARY KEY CLUSTERED 
) 

저장합니다 access_token를 만들었습니다. OpenID에는 요청할 수있는 새로 고침 토큰이 있으므로 잘 보관하십시오.

ashx 핸들러가 redirect_url입니다. 해당 처리기에서 각 사례에 대해 모든 처리를 수행 할 수 있으며 사용자는 이미 공급자 데이터베이스에 계정이 있으며 사용자는 공급자 데이터베이스에 계정이 없으므로 사용자를 생성 할 수 있습니다. 모든 그 깔끔한 쓰레기 :

그것으로 재미를보십시오.

2

이것은 오래된 질문이지만 주변을 검색 할 때 사용한 접근 방식을 보지 못했습니다. (전체 OpenID 통합이 아니라 회사의 Google Apps for Business 계정과의 통합 모양을 만들고 있기 때문에 Google에서만 테스트 한 것입니다.)

저는 DotNetOpenAuth을 사용하여 전자 메일 주소가 필요한 OpenID를 요구합니다. 그런 다음

 request.AddExtension(new ClaimsRequest 
     { 
      BirthDate = DemandLevel.NoRequest, 
      Email = DemandLevel.Require, 
      FullName = DemandLevel.Require 
     }); 

, 내가 다시 인증 응답을받을 때, 나는 전자 메일에서 사용자 이름을 조회 : 양식을 설정,

  case AuthenticationStatus.Authenticated: 
       ClaimsResponse info = response.GetExtension<ClaimsResponse>(); 
       string username = Membership.GetUserNameByEmail(info.Email); 
       FormsAuthentication.SetAuthCookie(username, true); 
       return Redirect(ReturnUrl ?? "/"); 

당신은 또한 회원 및 역할 공급자가 설정 한 가정 적절한 사용자 이름에 대한 인증 쿠키를 사용하면 다른 모든 회원 및 역할의 장점을 누릴 수 있습니다.

+0

어떻게 저장 하시겠습니까? 회원 데이터베이스? –

+0

새 계정을 만드는 중 저장 하시겠습니까? – Dave

+1

예, 비밀번호는 어떻게 처리합니까? –

관련 문제