면책 조항 : MVC4 + Web API + 웹 서비스를 처음 사용한다고 말하면서부터 시작하겠습니다. + JQuery. 나는 이것을 잘못된 각도로 공격했을 수도 있습니다.ASP.NET 웹 API의 기본 및 폼 인증
저는 .NET 용 C#에서 Web MVC App + Web API를 Azure에 배포하려고합니다. 웹 API는 모바일 클라이언트 (iOS, RestKit 사용)에서 사용됩니다.
웹 MVC 응용 프로그램은 비교적 간단합니다. 우리는 그것을위한 양식 인증과 SimpleMembership을 사용하고자합니다.
우리는 JQuery (Knockout) 스크립트의 웹 API 메소드를 사용하여 웹 페이지를 채 웁니다. 따라서 JQuery는 폼 인증으로 인증 된 동일한 ID를 사용하기를 기대합니다.
그러나 Web Api는 모바일 클라이언트에서 직접 호출 할 수 있습니다. 해당 양식에 대한 양식 인증이 없습니다.
Thinktecture Identity Model (http://nuget.org/packages/Thinktecture.IdentityModelhttps://github.com/thinktecture/Thinktecture.IdentityModel.40)을 살펴 보았습니다. BasicAuth 및 AcessKey 처리기를 config에 추가하고 작동합니다 (아래 코드 참조).
인증되지 않고 webapi에 액세스하려고하면 브라우저가 기본 인증 대화 상자를 표시하고 예상대로 작동합니다.
"문제"는 이미 폼 인증을 통해 로그인하고 웹 API 메서드를 호출하려고해도 여전히 기본 인증 대화 상자가 표시된다는 것입니다. 다시 말해, Thinktecture IdentityModel은 폼 인증을 모두 무시하는 것처럼 보입니다.
내 질문은 :
- 내 기대가 정확합니까? 일단 양식 인증을 수행하면 JQuery 스크립트 등이 동일한 브라우저 사용자 세션에서 웹 API에 액세스 할 수있게해야합니다.
- 어떻게 수정합니까?
- 내 기대가 정확하지 않은 경우; 이게 어떻게 작동할까요? 예 : JQuery 스크립트를 인증하려면 어떻게해야합니까?
Stackoverflow에는 비슷한 질문이 많이 있습니다. 솔직히 많은 것을 보았습니다. 동영상 등을 보았지만, 뭔가 분명한 것을 놓치고 있거나 새로운 것에 대해 명확한 문서가 없습니다. 기술.
감사합니다. 감사.
public static AuthenticationConfiguration CreateConfiguration()
{
var config = new AuthenticationConfiguration
{
DefaultAuthenticationScheme = "Basic",
EnableSessionToken = true,
SetNoRedirectMarker = true
};
config.AddBasicAuthentication((userName, password) => userName == password, retainPassword: false);
config.AddAccessKey(token =>
{
if (ObfuscatingComparer.IsEqual(token, "accesskey123"))
{
return Principal.Create("Custom",
new Claim("customerid", "123"),
new Claim("email", "[email protected]"));
}
return null;
}, AuthenticationOptions.ForQueryString("key"));
안녕하세요, 좋습니다. 그러나 "IMembershipService"인터페이스의 출처는 어디입니까? (WebAPIDoongle 또는 표준 .NET4 MVC의 일부로 보이지 않음). 클래스가 작동하지만 동일한 클래스에서 API 키를 처리하기를 바랍니다. 그러나 해당 기능을 추가 할 수 있다고 생각합니다. 내 주요 문제는 지금은 "WebSecurity"클래스를 사용하여 데이터베이스에 대해 사용자의 유효성을 검사하고 주체를 반환하는 방법입니다 (WebSecurity.Login을 수행 할 수는 있지만 그 방법은 어렵습니다). – rufo
BTW : 브라우저 (Chrome)에서 테스트 할 때 사용자가 로그인하지 않으면 브라우저가 기본 인증을 제공하지 않습니다. 모바일 클라이언트에는 이것이 필요하지 않지만 테스트하기에 편리합니다. 나는 그것도 점검 할 것이다. – rufo
@rufo IMembershipService는 저의 구현물입니다. 아이디어를 얻으려고 거기에 넣었습니다. 당신은 자신의 impl로 그것을 대체 할 수 있습니다. – tugberk