2012-06-16 1 views
1

내가 한 눈에 DotNetOpenAuth이되고 (이 많지되는) 것 같습니다 좋은 클라이언트 라이브러리 (2.0) 제공자 현지의 OAuth를 구축하기위한 프레임 워크를 식별하는 과정에서 오전 이상적이었고 나는 흥분하고 샘플을 시험해보고 싶었다. DotNetOpenAuth : 샘플의 OAuth 2.0 AuthorizationServer 작업 얻기

나는 샘플 자체는 여전히 내가 OAuth2를 \ AuthorizationServer 샘플 작업을 얻을 수있는 방법을 알아낼 수있는 소스와 하구 며칠을 보냈다. 샘플은 다른 모든 외부 공급자에게 잘 작동합니다. 나는 많은 게시물을 통해 이상적인 설정, 입력, 설정을 알아 내 초기 로그인 화면을 통과했지만 행운이 없었습니다.

누군가가 OAuth2를 \ AuthorizationServer 샘플 및 실행을 얻기 위해 따라야하는 초기 단계를 공유하시기 바랍니다 수 있습니다. 데이터베이스 설정 포함. 코드를 밟아 보았지만 잃어 버렸습니다.

시간을 내 주셔서 감사합니다. 내가 그걸 분명히 이해할 수 있다면 그 단계들을 문서화하게되어 매우 기쁩니다. 프레임 워크는 우수하지만 문서가 부족하다고 생각합니다. 다시 한 번 감사드립니다!

내가 점점 오전 오류입니다

DotNetOpenAuth.Messaging.ProtocolException : 없음 오픈 ID 엔드 포인트는 발견했다. ---> System.InvalidOperationException : 순서에 요소를

내가 입력으로 자 URI를 의존하고 사용했습니다, HTTP를 포함하지 : // 로컬 호스트 : 59722/ 에 http : // localhost를 : 59,722 /SampleWcf2.aspx

그리고 전체 스택 추적, 나는 완전히 unlikel하지 않은 (틀리지 않는

DotNetOpenAuth.Messaging.ProtocolException: No OpenID endpoint found. ---> System.InvalidOperationException: Sequence contains no elements 
    at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) 
    at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) in d:\Temp\dotnetopenid\src\DotNetOpenAuth.OpenId.RelyingParty\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 352 
    --- End of inner exception stack trace --- 
    at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) in d:\Temp\dotnetopenid\src\DotNetOpenAuth.OpenId.RelyingParty\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 354 
    at OAuthAuthorizationServer.Controllers.AccountController.LogOn(LogOnModel model, String returnUrl) in D:\Temp\dotnetopenid\samples\OAuthAuthorizationServer\Controllers\AccountController.cs:line 40 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) 
    at System.Web.Mvc.Controller.ExecuteCore() 
    at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) 
    at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d() 
    at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) 
    at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) 
    at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 


2012-06-15 16:08:03,490 (GMT+10) [16] DEBUG DotNetOpenAuth.Http - HTTP GET http://localhost:59722/SampleWcf2.aspx 
2012-06-15 16:08:03,498 (GMT+10) [16] DEBUG DotNetOpenAuth.Yadis - HTML discovery failed to find any endpoints. 
2012-06-15 16:08:03,498 (GMT+10) [16] INFO DotNetOpenAuth.Yadis - Performing discovery on user-supplied identifier: http://localhost:59722/SampleWcf2.aspx 
2012-06-15 16:08:03,498 (GMT+10) [16] DEBUG DotNetOpenAuth.Yadis - Filtering and sorting of endpoints did not affect the list. 
2012-06-15 16:08:03,578 (GMT+10) [16] ERROR DotNetOpenAuth.OAuthAuthorizationServer - An unhandled exception occurred in ASP.NET processing: DotNetOpenAuth.Messaging.ProtocolException: No OpenID endpoint found. ---> System.InvalidOperationException: Sequence contains no elements 
    at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) 
    at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) in d:\Temp\dotnetopenid\src\DotNetOpenAuth.OpenId.RelyingParty\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 352 
    --- End of inner exception stack trace --- 
    at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) in d:\Temp\dotnetopenid\src\DotNetOpenAuth.OpenId.RelyingParty\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 354 
    at OAuthAuthorizationServer.Controllers.AccountController.LogOn(LogOnModel model, String returnUrl) in D:\Temp\dotnetopenid\samples\OAuthAuthorizationServer\Controllers\AccountController.cs:line 40 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) 
    at System.Web.Mvc.Controller.ExecuteCore() 
    at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) 
    at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d() 
    at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) 
    at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) 
    at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
DotNetOpenAuth.Messaging.ProtocolException: No OpenID endpoint found. ---> System.InvalidOperationException: Sequence contains no elements 
    at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) 
    at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) in d:\Temp\dotnetopenid\src\DotNetOpenAuth.OpenId.RelyingParty\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 352 
    --- End of inner exception stack trace --- 
    at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) in d:\Temp\dotnetopenid\src\DotNetOpenAuth.OpenId.RelyingParty\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 354 
    at OAuthAuthorizationServer.Controllers.AccountController.LogOn(LogOnModel model, String returnUrl) in D:\Temp\dotnetopenid\samples\OAuthAuthorizationServer\Controllers\AccountController.cs:line 40 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) 
    at System.Web.Mvc.Controller.ExecuteCore() 
    at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) 
    at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d() 
    at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) 
    at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) 
    at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

강력한 텍스트

답변

1

OAuth 2.0 인증 서버를 OpenID 2.0 제공 업체와 혼동하는 것처럼 들립니다. 그들은 완전히 다릅니다. 원래 질문에서 실패 지점 인 것으로 보이는 인증 서버 샘플에 "로그인"할 때 유효한 OpenID를 입력해야합니다. 시도한 URL은 OpenID가 아닌 OAuth 2.0 클라이언트 샘플의 URL 인 것으로 보입니다.

OpenIdProvider 샘플과 같은 식별자를 사용하여 인증 서버에 로그인하거나 Yahoo! 계정 또는 "tinyurl.com/googop"로 로그인 한 경우 "가장 간단하게" "yahoo.com"만 사용하십시오. Google을 사용합니다.

+0

감사! 내 요구 사항은 로컬 인증 서버를 구현하는 것입니다. API를 사용하여 보안 리소스에 액세스 할 수 있습니다. 클라이언트는 API에 액세스하기위한 신뢰/자격 증명을 가지고 있습니다. 클라이언트 사용자가 API에 액세스 할 때 권한 부여 서버가 이전 액세스 권한을 기반으로 액세스 권한을 부여하게합니다. AuthorizationServer 샘플에서이 작업을 수행하고있는 것으로 보입니다. Implicit grants flow가 작동하고 자원 소유자 자격 증명 플로우가 작동해야합니다. 그래서 나는 DotNetOpenAuth 임팔린이 이러한 구조를 가지고 있다고 생각합니다. 제 잘못 수정 해주세요. –

+0

그게 전부 좋은 소리, 그리고 네 DotNetOpenAuth 당신이하려는 것을 지원합니다. 따라서 유효한 OpenID를 제공 할 필요가있는 인증 서버에 로그인 할 때 (또는 사용자에게 적합하도록 username + pasword 로그인을 허용하도록 인증 서버를 변경하십시오) –

+0

"문서 부족"부분에 동의합니다 이의. 당신은 이것에 대한 완벽한 프레임 워크를 만들었지 만 많은 사람들이 문서가 누락되거나 부족하기 때문에 올바르게 구현할 수 없다고 생각합니다. –

0

y) AuthorizationServer 샘플은 OpenID 공급자에 대해 사용자를 인증하여 OAuth 요청의 유효성을 검사하는 게이트웨이 역할을합니다. 의존 당사자의 URL을 입력하는 대신 OpenID 공급자 URL을 입력 해보십시오. (심지어 테스트 용으로도 public providers you may have an account with을 사용하여 문제가 없습니다.)

+0

답장을 보내 주셔서 감사합니다. AuthorizationServer 기본 URL (http : // localhost : 50172 /)을 사용해야한다는 것을 알았습니다. 추가로 단계를 밟을 수 있었지만 같은 예외를 뱉어 버렸습니다. DotNetOpenAuth 라이브러리가 사용자 정의 OpenID 공급자 (AuthorizationServer)를 빌드하기위한 기본 클래스를 구현한다는 인상하에있었습니다. 누군가가이를 준수 할 수 있습니까? 또한 누구나 DotNetOpenAuth 또는 다른 프레임 워크를 사용하여 건물 하나를 성공적으로 만들었습니까? 시간을 내 주셔서 감사합니다. –

+0

너무 오랫동안 답변을 드리지 못해 죄송합니다.나는 OAuth2 클래스와 OpenID 클래스 사이에 혼란이 있다고 생각한다; 내가 아는 한 AuthorizationServer는 OAuth2 인증 서버 구현입니다. OpenID 공급자 클래스는 DotNetOpenAuth.OpenId.Provider.OpenIdProvider입니다. 이전 작업에서 _OAuth2_ 인증 서버 및 클라이언트를 구축하는 데 성공했습니다. 필자의 첫 번째 대답은 AuthorizationServer를 사용하는 샘플이 OAuth2 인증 서버를 구현하는 것인데 샘플로 제공되지 않는 OpenID 엔드 포인트로 인증을 전달하는 것입니다. – codermonkeyfuel