2016-08-10 3 views
0

Xamarin.Forms 프로젝트와 Table API 프로젝트를 만들었습니다. 둘 다 Azure 포털의 QuickStart 메뉴를 통해 생성되었습니다.Azure AD 서버 인증, 디렉토리를 볼 권한이 없습니다.

포털에 Azure AD를 구성 했으므로 내 XForms 응용 프로그램을 통해 AD에서 토큰을 성공적으로 검색 할 수 있습니다. 그러나 MobileServiceClient의 LoginAsync 메서드를 사용하여 Table API에 로그인하려고하면 "사용자가 디렉터리 또는 페이지를 볼 수있는 권한이 없습니다."라는 메시지가 나타납니다.

저는 다음과 같은 가이드를 살펴 보았지만 운이 없었습니다. Add authentication to your Xamarin.Forms app

How to: Work with authentication

나는 또한 다음과 같은 질문을보고했지만 해결책을 찾지 못했습니다

How to configure your App Service application to use Azure Active Directory login.

Cordova AAD server flow authentication hangs on Android and iOS

나는 테이블 API 프로젝트에 대한 몇 가지 특정 인증을 누락 될 수 있다고 생각하는 건가요? Constants.ClientID은 네이티브 클라이언트 응용 프로그램의 클라이언트 ID가 아닌 웹 서버입니다

PCL 프로젝트 XForms를 IN

var ar = await authContext.AcquireTokenAsync(Constants.GraphResourceUri, Constants.ClientId, userCredintials); 

      JObject payload = new JObject(); 
      payload["access_token"] = ar.AccessToken; 

      var client = new MobileServiceClient(Constants.ApplicationUrl); 
      var user = await client.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload); 

:

여기에 내 코드와 설정입니다. 나는 테이블 API 프로젝트

[Authorize] 
public class StatisticController : ApiController 

표 API의 StartUp.cs의 구성

public void Configuration(IAppBuilder app) 
    { 
     app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions()); 
     ConfigureMobileApp(app); 
    } 

모바일 서비스 AUTH 설정 FROM CONTROLLER의 404

예를 얻을 주위에 나는 그것을 전환하는 경우 enter image description here

(210)

SINGLE SING-ON 광고는 I는 다음 설치와 우편 배달을 통해 오류를 복제 할 수 있습니다 enter image description here

네이티브 클라이언트 앱 설정 enter image description here enter image description here

편집

을 설정 : enter image description here

"X-ZUMO-AUTH"헤더에 access_token의 값을 포함 시키려고했으나 같은 결과가 나타납니다. 아직 허가가 없습니다. 또한 POST 요청의 모든 헤더를 변경하지 않고 제외하려고했습니다.내 모바일 앱이나 Postmand의 POST 요청이 허용되지 않는다는 뜻입니까?

수동으로 브라우저에서 mysite.azurewebsites.net/.auth/login/aad를 탐색하면 내 광고의 사용자와 로그인 할 수 있습니다. AD가 서비스와 올바르게 통신하고있는 것과 같습니다.

mattchenderson에 IT

큰 감사를 고정! 그는 정상 그래프 API 대신 내 서비스의 클라이언트 ID로 상수 GraphResourceUri를 변경해야한다고 제안했습니다. 클라이언트의 단일 인스턴스를 추가하는 것과 함께 이제는 내 서비스에 성공적으로 로그인 할 수 있습니다.

+0

수정 된 답변은 새로운 결과를 포함합니다. 그래도 같은 결과. –

+0

수취인이 없습니까? 비슷한 문제가있는 사람이 있습니까? –

답변

1

POST 요청이 허용되며 POSTman을 항상 테스트에 사용합니다.

이와 같은 문제의 가장 일반적인 원인은 잠재 고객 확인 문제입니다. 청중은이 토큰이 유효한 자원을 나타내는 AAD 토큰의 속성입니다. 위의 코드가 주어지면 잠재 고객이 Constants.GraphResourceUri과 같을 것으로 기대합니다. 내 생각 엔이 실제로 그래프 API 및 귀하의 응용 프로그램이 아니며 유효성 검사 실패를 일으킬 것입니다, 비록 당신이 LoginAsync() 호출 할 때 일어날 기대합니다. 대신 웹 응용 프로그램 클라이언트 ID ("모바일 서비스 설정"스크린 샷의 클라이언트 ID)를 사용해 보시기 바랍니다.

디버깅을 쉽게하려면 AAD 토큰을 http://jwt.io과 같은 것으로 가져 가면 토큰 속성을 볼 수 있습니다. "aud"는 포털에 등록 된 응용 프로그램의 클라이언트 ID와 같을 것으로 예상되며 발급자 필드도 일치 시키길 원합니다. 토큰이 만기되지 않았는지 확인하십시오.

  1. 사용 토큰은 요청의 X-ZUMO-AUTH 헤더에 LoginAsync()의 일부로 반환 : 보호되는 API에 액세스하기 위해 토큰을 사용하는 경우

    , 그것을 제공하는 방법은 두 가지가 있습니다. 이것은 동일한 MobileServiceClient를 사용하는 테이블 작업을 위해 SDK에 의해 자동으로 수행됩니다.
  2. 베어러 토큰 사양에 따라 직접 AAD 토큰을 사용하십시오. 즉, 값이 "Bearer"인 Authorization 헤더에 토큰을 사용자 값으로 대체하십시오.

또한 코드에서 로그인 작업을 위해 새 MobileServiceClient을 생성하고 있습니다. 이것은 로그인 정보가 MobileServiceClient 개체에 첨부되어 있기 때문에 일반적으로 권장하지 않습니다. 참조를 잃어 버리면 로그인 정보 (및 다른 몇 가지 설정)가 손실되며 테이블 작업에 적용되지 않습니다. 다른 곳에서 참조 된 단일 인스턴스 (예 : Xamarin, 공유 코드의 정적 변수)를 사용하는 것이 좋습니다.

+0

@mattchenderson 감사합니다! 그래프 API를 내 서비스의 클라이언트 ID로 변경하면 제안한 것처럼 트릭을 만들 수 있습니다! 나는 이것을 포기하려했습니다 ... 저는 다른 사람들이 유익을 얻을 수 있도록 수정안을 포함하도록 답을 편집했습니다. –

관련 문제