2012-06-26 12 views
7

Buduję interfejs API MetroD # SkyDrive na wierzchu zestawu SDK Live Connect (http://msdn.microsoft.com/en-us/live/ domyślnie) - w Windows 8 użytkownik ma możliwość zalogowania się na komputerze z systemem Windows 8 za pomocą konta LOCAL lub konta LIVE.Aplikacja Metro - jak wykryć logowanie przy użyciu identyfikatora Live ID lub konta lokalnego

Podczas korzystania Live Połącz SDK, jeśli zadzwonię

// assume wlscopes is properly set 

LiveAuthClient liveAuthClient = new LiveAuthClient(); 
LiveLoginResult loginResult = await liveAuthClient.LoginAsync(wlscopes); 

// do some stuff on skydrive 

liveAuthClient.Logout(); // <-- issue only with live account, not local 

przy użyciu konta lokalnego, to loguje mnie (wielki)

Kiedy nazywają ten sam kod przy użyciu konta Live, Dostaję nieobsługiwany wyjątek - nie mogę nawet dodać try {} catch {} wokół tego błędu.

Wyjątek:

Cannot sign out from the application since the user account is connected. (Exception from HRESULT: 0x8086000E) 

Oczywiście ponieważ użytkownik, który jest zalogowany na koncie Live nie można się wylogować, mój API musi wykryć, czy bieżący użytkownik korzysta z konta na żywo, więc mogę zapobiec wywołaniu wylogowania () metoda.

so .... Moje pytanie brzmi: skąd mam wiedzieć, jakiego rodzaju konta użytkownik zalogował się w systemie Windows 8?

+0

Dlaczego nie można po prostu nie zalogować użytkownik z konta? Pozwól im decydować. Jakie są wyniki loginResult. Nie wierzę, że Microsoft ujawni takie informacje, w przeciwnym razie może prowadzić do złośliwego oprogramowania atakującego sesję Windows Live. –

+0

Po zalogowaniu do systemu Windows 8 przy użyciu konta na żywo nie można się wylogować, dopóki nie zostanie przełączone na inne konto lub konto lokalne ... system Windows 8 będzie zapisywać wszystkie dane. Zgadzam się, nie mogą tego ujawnić, ale wtedy SDK rzuca niedopuszczalny błąd ... więc w jaki sposób temu zapobiec? –

Odpowiedz

5

znalazł odpowiedź: http://msdn.microsoft.com/en-us/library/windows/apps/windows.security.authentication.onlineid.onlineidauthenticator.cansignout.aspx#Y0

Poniżej znajduje się nieruchomość, że musimy użyć:

Windows.Security.Authentication.OnlineId.OnlineAuthenticator.CanSignOut 

przykładowy kod:

public async Task<bool> Logout() 
    { 
     // Check to see if the user can sign out (Live account or Local account) 
     var onlineIdAuthenticator = new OnlineIdAuthenticator(); 
     var serviceTicketRequest = new OnlineIdServiceTicketRequest("wl.basic", "DELEGATION"); 
     await onlineIdAuthenticator.AuthenticateUserAsync(serviceTicketRequest); 

     if (onlineIdAuthenticator.CanSignOut) 
     { 
      LiveAuthClient.Logout();    
     } 

     return true; 
    } 
Powiązane problemy