4

MVC 응용 프로그램에 XML을 보내고 다른 XML을 응답으로받는 콘솔 응용 프로그램이 있습니다. 완벽하게 작동하지만 권한 부여를 추가하고 싶습니다 (명백한 이유로). 여기 콘솔 응용 프로그램에서 ASP.NET MVC 응용 프로그램의 인증 방법

using (var wc = new WebClient()) 
{ 
    return GetXmlFromBytes(
     wc.UploadData("URL", GetBytesFromXml(xmlToSend)) 
    ); 
} 

그리고

이 (가) MVC 응용 프로그램에서 코드입니다 :

public ActionResult DoSomething() 
{ 
    XElement xml = XElement.Load(new System.IO.StreamReader(Request.InputStream)); 
    var response = InsertDataFromXml(xml); 
    return File(GenerateFileFromResponse, "text/xml", "result.xml"); 
} 

그리고 작동 여기

콘솔 응용 프로그램에서 코드입니다. (추가 wc.Credentials)

콘솔 :

using (var wc = new WebClient()) 
{ 
    wc.Credentials = new NetworkCredential("user", "password"); 
    return GetXmlFromBytes(
     wc.UploadData("URL", GetBytesFromXml(xmlToSend)) 
    ); 
} 

MVC 응용 프로그램 (추가 [Authorize]) : 그래서, 인증을 구현하기 위해, 나는 다음과 같은 코드를 추가

[Authorize] 
public ActionResult DoSomething() 
{ 
    XElement xml = XElement.Load(new System.IO.StreamReader(Request.InputStream)); 
    var response = InsertDataFromXml(xml); 
    return File(GenerateFileFromResponse, "text/xml", "result.xml"); 
} 

을 그리고 그것은 '아무튼 일하지 마라. 이 정보는이 문제를 해결하기 위해 필요한 경우는 모르겠지만, 내 web.config는 다음과 같은 항목이 있습니다

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" /> 
</authentication> 

사실, MVC 응용 프로그램이 다시 전송 파일이 로그온 페이지의 HTML이입니다!

이 문제를 해결하려면 무엇을해야합니까? NetworkCredentials에 매개 변수가 누락 되었습니까? domain으로 인스턴스화 할 수 있지만 MVC 응용 프로그램의 사용자 도메인이 무엇인지 알 수 없습니다.

그리고 "사용자"와 "비밀번호"가 유효하다는 것을 확신합니다.

+0

폼 인증이 그런 식으로 작동하지 않습니다 참조 - 그것은 HTTP 쿠키를 사용합니다. Windows 통합 인증이 필요하거나 콘솔 응용 프로그램을 사용하여 먼저 "로그인"을 수행해야합니다. – bzlm

답변

3

신임장 유형을 혼합합니다.

wc.Credentials = new NetworkCredential("user", "password"); 

은 HTTP 인증 용입니다.

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" /> 
</authentication> 

은 폼 인증입니다.

이들은 완전히 다른 형식이며 호환되지 않습니다. 명령 줄 앱에서 양식 인증을 사용하는 것은 어렵습니다. 요청이있는 로그인 페이지로 이동하고 사용자 이름과 비밀번호를 POST 한 다음 반환되는 인증 쿠키를 가져와 후속 요청에 첨부해야합니다.

+0

인증 모드를 변경하는 옵션입니다.하지만 LogOn 양식을 사용할 수는 없습니다. HTTP 인증으로 변경하면이 기능이 느슨합니까? (죄송 합니다만, 나는이 문제에서 정말로 "멍청이"입니다!) –

+0

예, HTTP 인증으로 전환하면 승인 양식이 느슨합니다. – blowdart

+1

이 작업에 대한 사용자 지정 권한 부여 특성을 만들고 자격 증명에 대해 HTTP 헤더를 확인하는 방법은 어떻습니까? – ZippyV

1

먼저 폼 인증을 사용하는 것처럼 인증해야합니다.

  1. 로그온 웹 메소드를 호출하고 Auhentication 모드 = "설정 해봐요 방법

또는 두 번째 HTTP 요청에 대한 인증 쿠키 설정 HTTP 응답

  • 에서 인증 쿠키를 캡처 로컬 인트라넷에있는 경우 "Windows"!

  • +0

    로컬 인트라넷이 아닙니다. MVC 응용 프로그램은 다른 서버에 있습니다. 먼 곳에서나 LogOn 형태로 작동하는 간단한 인증 방법에 대한 아이디어가 있습니까? –

    +0

    2 번에 쿠키를 설정하는 법을 알고 있습니다. ('wc.Headers.Add (HttpRequestHeader.Cookie, "somecookie");'),하지만 여전히 나는 numer 1을하는 법을 모릅니다. –

    1

    양식 인증을 수행하는 데 사용할 수있는 AuthenticationService을 만듭니다. ClientBaseExtensions 클래스를 사용하면 WCF 서비스 클라이언트에서 쿠키를 가져올 수 있습니다.이 쿠키를 다른 전화에 넣으십시오 ...

    String cookies = null; 
    var auth = new AuthenticationServiceClient(); 
    using (new OperationContextScope(auth.InnerChannel)) 
    { 
        auth.Login("user", "password", null, true); 
        cookies = auth.GetIncomingCookies(); 
    } 
    

    이제 데이터 서비스 나 HTTP 호출에 쿠키 데이터를 주입하십시오.

    http://mytoolkit.codeplex.com/wikipage?title=ClientBaseExtensions

    관련 문제