0

저는 Azure 웹 사이트 (웹 사이트)로 배포 된 ASP.NET MVC 웹 사이트를 보유하고 있습니다. 해당 웹 사이트에는 승인이 필요한 섹션이 있습니다. 해당 섹션에 대한 액세스를 보호하기 위해 Windows Azure Active Directory (WAAD)를 이미 설정했습니다. 보호 된 섹션이로드되면 Azure 모바일 서비스와의 통합을 허용하는 Javascript 앱을로드합니다.Azure 웹 사이트 Single Sign On 사용자로 Azure Active Directory에서 Azure Mobile 서비스에 액세스합니다.

데이터 저장을 위해 사용하는 별도의 Azure 모바일 서비스 (mobserv)도 있습니다. 웹 사이트에서 mobserv 테이블과 api 끝점에 액세스하려고합니다. Azure 모바일 서비스에 .NET 백엔드를 사용하고 있습니다. 물론 [AuthorizeLevel]을 사용하여 이러한 mobserv 끝점을 보호해야합니다. 단지 적절한 자바 스크립트 클라이언트 (MobileServices.web-1.2.5.js)에 대한 참조를 추가, mobserv 응용 프로그램 ID를 제공하고 -

자습서 내가 응용 프로그램이 ([AuthorizeLevel(AuthorizationLevel.Application)] 사용)로 인증 할 때이 작업을 수행하는 방법을 보여줍니다 토큰. CORS는 상호 작용을 허용하도록 설정됩니다. 여태까지는 그런대로 잘됐다.

하지만 지금은 [AuthorizeLevel(AuthorizationLevel.User)]을 사용하여 특정 종단점을 보호하고 싶습니다. 이제 요청은 사용자으로 승인되어야합니다. 웹 사이트가 이미 WAAD로 보호되어 있기 때문에 클라이언트가 자바 스크립트 클라이언트에 대한 새로운 로그인을 수행하는 것을 원하지 않습니다 - 현재 WAAD 인증 헤더를 재사용하여 Single Sign On Experience를 갖기를 원하므로 mobserv가 사용자.

이 작업을 수행하는 방법에 대한 힌트를 찾지 못했습니다. 자습서에서는 mobserv에 대한 응용 프로그램 수준 인증 또는 명시 적 로그인 대화 상자 만 사용합니다.

아무도 단서가 있습니까?

답변

0

웹 사이트에 대한 토큰이 귀하의 앱에 적용되고 다른 리소스로 전달되는 경우 거부되어야한다는 점에서 '있는 그대로'토큰 재사용을 달성 할 수 없습니다. AAD 관점에서 볼 때 사용자가 새로운 액션을 취할 필요없이 웹 API와 함께 사용할 새로운 토큰에 대해 원래의 토큰을 교환 할 수있는 다양한 흐름이 있습니다. 그러나 시나리오에는 일부 모바일 서비스 관련 움직이는 부분이 포함되어 있으므로 여기에 어떻게 적용 할 것인지 잘 모르겠습니다. 모바일 서비스 사용자를 위해이 게시물에 플래그를 지정하고 있습니다.

+0

안녕하세요 비토리오, 덕분에 많은 위해를 : 나는 당신이 ClaimsIdentity에서 액세스 토큰을 얻을 수 있습니다, 그리고 당신은 당신의 모바일 서비스에 MVC 사이트에서 전화를 login 액션을 수행 할 Mobile Services .NET client SDK를 사용하여 용이하게 할 수 믿습니다 당신의 응답. 적어도 나는 그것이 권위있는 출처에서 왔음을 확신합니다 :-) 나는 당신의 대답을 upvote하고 싶습니다. 그러나 나의 현재의 신용은 현재 그렇게 할 수 없습니다. – Masterfu

1

vibronet의 게시물을 추적하면 모바일 서비스는 액세스 토큰의 HTTP POST를 지원하지만 액세스 토큰은 잠재 고객을 지정해야합니다. 귀하의 모바일 서비스로. 그래서 귀하의 웹 사이트에 발행 된 토큰은 독자적으로 작동하지 않습니다. AAD 플로우 중 하나를 통해 변환해야합니다.

그래서 AAD에는 웹 사이트와 모바일 서비스에 대한 두 가지 웹 응용 프로그램 등록이 필요합니다. 모바일 서비스 등록에서 다른 리소스에 노출 될 수있는 권한을 정의해야합니다. Mobile Services + ADAL tutorial ("Azure Active Directory에 모바일 서비스 등록")의 첫 번째 섹션에서는이 과정을 안내합니다. 그런 다음 해당 권한에 액세스하는 네이티브 클라이언트 응용 프로그램을 등록하는 대신 웹 사이트 등록으로 이동하여 거기에 대한 액세스를 구성합니다.

웹 사이트에 대한 AAD 토큰을 얻은 후에는이 권한을 활용하여 모바일 서비스에 대한 토큰을 얻을 수 있습니다. 이 작업은 Active Directory 인증 라이브러리 (수행 할 위치에 따라 JS 또는 .NET)에서 수행하는 흐름을 사용하여 수행하는 것이 가장 좋습니다.AAD 팀은 a nice sample on how to do this이고 모바일 서비스도 a tutorial which might be helpful입니다. 그러나 모바일 서비스에 대한 웹 사이트 액세스가 아닌 SharePoint Online에 대한 모바일 서비스 액세스를 수행합니다.

그런 다음 토큰을 " 클라이언트 흐름 "방법 ("How to: Authenticate Users" for the HTML/JS SDK에서 설명). AAD를 들어, 호출은 같은 것을 볼 것이다 : 사용자는 새로운 UI가 표시되지 않습니다

client.login(
     "aad", 
     {"access_token": "<TOKEN-FROM-AAD>"}) 
.done(function(results){ 
     alert("You are now logged in as: " + results.userId); 
}, 
function(error){ 
     alert("Error: " + err); 
}); 

을,하지만 그들은 로그인 것이며, SDK의 후속 호출이 인증됩니다.

MVC 백엔드에서이 작업을 더 쉽게 수행 할 수도 있습니다.

JObject payload = new JObject(); 
payload["access_token"] = "<TOKEN-FROM-AAD>"; 
MobileServiceUser user = await App.MobileService.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload); 
+0

@vibronet의 답변에 많은 세부 사항을 추가해 주셔서 감사합니다. 나는 확실히 그것을 시도 할 것이고,이 정보는 나를 위해 매우 귀중하다. 가능한 한 빨리 upvote하고 받아 들일 것입니다. – Masterfu

관련 문제