0

Windows UWP를 대상으로하는 Xamarin Forms 애플리케이션이 있습니다. 이 문서와 같은 Microsoft 문서를 따라 오프라인 동기화 및 인증을 성공적으로 설치했습니다. https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-windows-store-dotnet-get-started-usersAzure App Service 인증 - 인증이 실패한 경우에도 데이터가 추출됩니다.

또한 Windows Universal Runtime 구성 요소를 사용하여 실행할 백그라운드 (out-of-process) 작업을 성공적으로 설정했습니다.

프로세스 흐름 : 1) 사용자가 처음으로 응용 프로그램을 실행하면 로그인하고 Active Directory에 인증해야합니다. 그런 다음 응용 프로그램은 토큰을 캐시하고 백그라운드 작업을 등록합니다.

2) 백그라운드 작업이 타이머에서 시작됩니다. 테스트하는 동안 1 시간의 토큰 만료 및 프로세스 새로 고침을 테스트하기 때문에 토큰을 새로 고치지 않았습니다.

필자가 테스트 한 결과 완전히 이해하지 못했던 두 가지 사실을 발견했다. 예상치 못한 행동을했다.

1) 처음 로그인 할 때 사용자가받는 토큰의 만료 날짜를 검토하면 만료 날짜가 향후 30 일로 설정됩니다. 나는 그것이 1 시간 후에 만료되었다고 생각했다. 30 일 만기일이 표시된 이유는 무엇입니까? (이것은 내가 한 시간 만 지나면 액세스를 허용하지 않는다는 것을 확인한 것처럼 너무 큰 관심사는 아니며, 내가 관찰하고있는 이상한 것임).

2) 이것은 내가 우려할만한 것입니다. 백그라운드 작업이 1 시간 후에 인증을받지 못했지만 Azure에서 장치로 데이터를 가져올 수있었습니다. 인증에 실패했지만 끌어 오기 데이터 동기화가 성공 했으므로 밀어 넣기 데이터 동기화에 실패했습니다. 승인되지 않은 시도가 데이터를 가져 오지 못하도록하기 때문에 이것은 중요합니다. 다른 누구와도이 문제가 있었습니까? 이거 버그 야? 어떻게 든 인증을 잘못 구성 했습니까?

내 설정 :

푸른 앱 서비스> 쉬운 테이블 (Node.js를 백엔드)는 "인증 된 액세스"에 설정된 모든 권한을 갖습니다.

푸른 앱 서비스> 설정> 인증/권한 부여>

  • 앱 서비스 인증을 요청 푸른 Active Directory에 로그인하도록 설정되어 인증되지 않은 경우 취할 On으로
  • 액션을 설정,
  • 인증 공급자는 Azure Active Directory 용으로 구성됩니다.

모바일 앱 코드 :

MobileServiceClient client; 
IMobileServiceSyncTable<TableToPull> tableToPullDataFrom; 
IMobileServiceSyncTable<TableToPush> tableToPushDataTo; 
this.client = new MobileServiceClient(Constants.ApplicationURL); 
this.client.CurrentUser = new MobileServiceUser(Settings.UserId); 
this.client.CurrentUser.MobileServiceAuthenticationToken = Settings.AuthToken; 
store.DefineTable<TableToPull>(); 
store.DefineTable<TableToPush>(); 

(인증이 실패 할 경우 예상대로 실패) 비동기 코드 인 푸시 :

await this.client.SyncContext.PushAsync(); 

인증에 실패 할 경우 풀 비동기 코드, 실패했지만 (내 관심사입니다) :

await this.tableToPullDataFrom.PullAsync("tableQuery",this.tableToPullDataFrom.CreateQuery()); 

인증이 실패하더라도 백그라운드 작업이 Azure에서 데이터를 가져올 수 있다고 우려합니다.나는이 개념을 어떤 식 으로든 오해하고 누군가가 내게 왜 이런 일이 일어 났는지 설명 할 수 있기를 희망한다. 아니면 뭔가 다르게 구성해야합니까? 인증되지 않은 로그인이 데이터를 가져올 수 없도록해야합니다.

백그라운드 작업이 데이터를 순차적으로 밀어 넣으려고 시도하지만 푸시 작업 중에 잘못된 인증으로 인해 실패했지만 끌어 오기 작업 중에 성공하는 것을 볼 수 있습니다. SQL Azure DB에서 업데이트 된 데이터를 가져 오지만 (변경된 데이터는 격리 된 저장소 탐색기 및 SQLite Browser를 사용하여 볼 수 있음) 변경된 데이터를 SQL Azure DB (SSMS에서 볼 수 있음)로 보내지 않기 때문에 확인할 수 있습니다.

+0

"토큰"의 의미를 상세히 추가하십시오. 특히, 당신은 클라이언트 인증을 사용하고 있습니까? 토큰은 어디에서 구할 수 있습니까? 각 토큰을 참조 할 때 어떤 토큰 (인증 공급자 또는 ZUMO 토큰)을 의미합니까? 당신은 두 개의 토큰을 다루고 있습니다 - 하나는 인증 제공자로부터 왔고 다른 하나는 ZUMO로부터 왔습니다. –

+0

아래 코드를 사용하여 인증 토큰을받습니다. – Stacy

+0

죄송합니다. SHIFT + Enter가 아닌 Enter를 누르는 데 익숙합니다. 아래 코드를 사용하여 토큰을받습니다. 'MobileServiceUser user = TodoDataManager.DefaultManager.CurrentClient.LoginAsync (MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, new Dictionary () {{ "response_type", "code id_token"}} }); ' 그런 다음 설정에 토큰을 저장합니다 (Xam.Plugin.Settings NuGet을 사용하고 있습니다) : 'Settings.AuthToken = user.MobileServiceAuthenticationToken; 저장하는 토큰이 인증 공급자로부터 온 것 같지만 확실하지 않습니다. X-ZUMO-AUTH 헤더를 가져 오지 않습니다. – Stacy

답변

1

"인증 실패시 취해야 할 조치"가 잘못되었습니다. "조치 없음"으로 설정해야합니다. 이는 인증이 코드에 의해 처리 될 수 있도록하기위한 것입니다.

쉬운 테이블을 사용하는 경우 테이블의 사용 권한을 "인증 됨"으로 조정하십시오. ASP.NET을 사용하는 경우 클래스에 [Authorize] 특성을 추가하십시오.

인증은 내 책 - 2 장 http://aka.ms/zumobook에 자세히 설명되어 있습니다.

관련 문제