2014-06-09 2 views
2

웹 API를 사용하여 dnn 서비스 프레임 워크에 다음과 같은 간단한 ping 메소드를 만들었습니다.dnn WebApi - DnnAuthorize 메소드가 작동하지 않습니까?

[AllowAnonymous] 
[HttpGet] 
public HttpResponseMessage Ping() 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Pong!"); 
} 

이제 브라우저에서 올바르게 호출 할 수 있습니다. 이 경우 변경하려면

[DnnAuthorize] 
[HttpGet] 
public HttpResponseMessage Ping() 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Pong!"); 
} 

브라우저에 팝업 사용자 이름과 암호 요청이 표시됩니다. 세부 정보를 입력 할 때마다 로그인 상자가 잘못 표시된 것처럼 다시 나타납니다.

나는 또한 [DnnAuthorize(StaticRoles="Administrators")]을 시도했지만 동일했다.

그래서 Dnn Dash Service 소스를 다운로드하고 데스크톱 앱 프로젝트를로드했습니다. 내 서비스에서 위의 방법과 함께 일하는 것이 너무

string url = DnnRequest.GetUrl(credentials.HttpAlias, "RegisterService", "Register", "Ping", false); 

에 다음 줄

string url = DnnRequest.GetUrl(credentials.HttpAlias, "DnnDash_SimpleDashboard", "Dash", "PingHost", false);    

을 대체. 프로젝트를 실행하면 500 오류가 발생합니다.

왜 내가 잘못했는지 알고 싶습니까? 1

편집은 내 사이트에 DNN 대시 서비스를 업로드 한 후 데스크톱 응용 프로그램을 실행했습니다. 여전히 똑같은 문제이므로 적어도 내 서비스는 아는 것이 아닙니다.

편집 2

나는 나의 DNN 로그를 삭제 한 후 바탕 화면이 몇 번되는 앱 실행. 로그로 돌아가 새로 생성 된 파일을 열었습니다. 데스크톱 응용 프로그램을 실행하는 데 필적하는 다음 항목 중 일부를 찾았습니다. 당신이 해시 된 암호를 사용하여 DNN 사이트를 설정할 때

[Thread:99][FATAL] DotNetNuke.Web.Common.Internal.DotNetNukeHttpApplication - System.Configuration.ConfigurationErrorsException: Password Retrieval is not enabled 
at System.Web.Http.WebHost.HttpControllerHandler.EndProcessRequest(IAsyncResult result) 
at System.Web.Http.WebHost.HttpControllerHandler.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) 

EDIT 3

확인 EDIT 2의 오류가 발생하는 것으로 보인다. 나는 암호로 고쳐 쓴 암호에 넘어서 전환하고 지금 서비스에서 "허가하지 않는"응답 응답을 얻는다. 관리자 로깅이 허가되지 않은 이유를 알아야합니다.

참고 : 해시 된 암호를 암호화로 전환하면 새 사용자에게만 영향을줍니다. 기존 사용자의 경우 암호 형식을 업데이트하기 위해 SQL 스크립트를 실행해야하며 암호를 재설정해야합니다.

+0

그래서 편집 2는 문제를 해결했음을 의미합니까?그렇지 않은 경우 [이 DNN 문제] (https://dnntracker.atlassian.net/browse/DNN-27209)를보십시오. –

+0

Fiddler를 사용하여 요청 헤더와 서버의 응답을 검사하고 문제가 발생했는지 확인하십시오. –

+0

@ Gaz83, 귀하의 편집 내용이 귀하의 솔루션을 설명한다면, 귀하의 질문에 자유롭게 대답하십시오. 다른 사용자에게 유용한 참고 자료입니다. –

답변

0

이 질문은 오래된 것으로 알고 있지만 비슷한 문제가 발생하여이를 올바르게 고칠 수있었습니다. 요청에 대해 관리자에게 권한을 부여하려면 단순히 문자열을 전달할 수 없습니다. 이유는 dnn 인스턴스 당 "admin", "Administrator"(no 's)와 같은 다른 이름을 갖는 관리 역할이있는 좋은 기회입니다. 이 문제를 해결하기 위해 지금처럼 쓰기 :

[HttpDelete, DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] 

을 당신이 당신의 코드이 조각을 사용하여 다른 곳에서이 역할 이름에 액세스해야합니다.

private string GetAdminRoleName() 
    { 
     return PortalSettings.AdministratorRoleName; 
    } 

누군가를 돕는 희망. 죄송합니다. 이것은 늦은 답변입니다.

관련 문제