Graph API에 액세스Accessing the Graph API

Xamarin 응용 프로그램 내에서 Graph API를 사용 하려면 다음 단계를 수행 합니다.Follow these steps to use the Graph API from within a Xamarin application:

  1. Windowsazure.com 포털에서 Azure Active Directory 등록Registering with Azure Active Directory on the windowsazure.com portal, then
  2. 서비스를 구성합니다.Configure services.

3단계:Step 3. 앱에 Active Directory 인증 추가Adding Active Directory authentication to an app

응용 프로그램에서 Visual Studio의 NuGet 패키지 관리자 또는 Mac용 Visual Studio를 사용 하 여 AZURE ADAL (Azure Active Directory Authentication Library) 에 대 한 참조를 추가 합니다.In your application, add a reference to Azure Active Directory Authentication Library (Azure ADAL) using the NuGet Package Manager in Visual Studio or Visual Studio for Mac. 미리 보기 상태 이므로이 패키지를 포함 하려면 시험판 패키지 표시 를 선택 해야 합니다.Make sure you select Show pre-release packages to include this package, as it is still in preview.

중요

참고: Azure ADAL 3.0은 현재 미리 보기 이며 최종 버전을 출시 하기 전에 주요 변경 내용이 있을 수 있습니다.Note: Azure ADAL 3.0 is currently a preview and there may be breaking changes before the final version is released.

이제 응용 프로그램에서 인증 흐름에 필요한 다음과 같은 클래스 수준 변수를 추가 해야 합니다.In your application, you will now need to add the following class level variables that are required for the authentication flow.

//Client ID
public static string clientId = "25927d3c-.....-63f2304b90de";
public static string commonAuthority = "https://login.windows.net/common"
//Redirect URI
public static Uri returnUri = new Uri("http://xam-demo-redirect");
//Graph URI if you've given permission to Azure Active Directory
const string graphResourceUri = "https://graph.windows.net";
public static string graphApiVersion = "2013-11-08";
//AuthenticationResult will hold the result after authentication completes
AuthenticationResult authResult = null;

한 가지 주의할 점은 commonAuthority입니다.One thing to note here is commonAuthority. 인증 끝점이 common되 면 앱이 다중 테 넌 트로 전환 됩니다. 즉, 사용자가 Active Directory 자격 증명으로 로그인을 사용할 수 있습니다.When the authentication endpoint is common, your app becomes multi-tenant, which means any user can use login with their Active Directory credentials. 인증 후 해당 사용자는 자신의 Active Directory의 컨텍스트에서 작업 하 게 됩니다. 즉, Active Directory와 관련 된 세부 정보를 볼 수 있습니다.After authentication, that user will work on the context of their own Active Directory – i.e. they will see details related to his Active Directory.

액세스 토큰을 획득 하는 Write 메서드Write method to acquire Access Token

다음 코드 (Android 용)는 인증을 시작 하 고 완료 되 면 authResult에 결과를 할당 합니다.The following code (for Android) will start the authentication and upon completion assign the result in authResult. IOS 및 Windows Phone 구현은 약간 다릅니다. 두 번째 매개 변수 (Activity)는 iOS에서 다르며 Windows Phone에는 없습니다.The iOS and Windows Phone implementations differ slightly: the second parameter (Activity) is different on iOS and absent on Windows Phone.

public static async Task<AuthenticationResult> GetAccessToken
            (string serviceResourceId, Activity activity)
{
    authContext = new AuthenticationContext(Authority);
    if (authContext.TokenCache.ReadItems().Count() > 0)
        authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority);
    var authResult = await authContext.AcquireTokenAsync(serviceResourceId, clientId, returnUri, new AuthorizationParameters(activity));
    return authResult;
}  

위의 코드에서 AuthenticationContext는 commonAuthority 인증을 담당 합니다.In the above code, the AuthenticationContext is responsible for the authentication with commonAuthority. 이 클래스에는 액세스 해야 하는 리소스로 매개 변수를 사용 하는 AcquireTokenAsync 메서드가 있습니다 .이 경우에는 graphResourceUri, clientIdreturnUri를 사용 해야 합니다.It has an AcquireTokenAsync method, which take parameters as a resource which needs to be accessed, in this case graphResourceUri, clientId, and returnUri. 인증이 완료 되 면 앱이 returnUri로 돌아갑니다.The app will return to the returnUri when authentication completes. 이 코드는 모든 플랫폼에서 동일 하 게 유지 되지만 마지막 매개 변수 AuthorizationParameters은 플랫폼 마다 다르며 인증 흐름을 관리 하는 일을 담당 합니다.This code will remain the same for all platforms, however, the last parameter, AuthorizationParameters, will be different on different platforms and is responsible for governing the authentication flow.

Android 또는 iOS의 경우 this 매개 AuthorizationParameters(this) 변수를 전달 하 여 컨텍스트를 공유 하는 반면 Windows에서는 매개 변수 없이 새 AuthorizationParameters()으로 전달 됩니다.In the case of Android or iOS, we pass this parameter to AuthorizationParameters(this) to share the context, whereas in Windows it is passed without any parameter as new AuthorizationParameters().

Android에 대 한 연속 처리Handle continuation for Android

인증이 완료 된 후에는 흐름이 앱으로 돌아옵니다.After authentication is complete, the flow should return to the app. Android의 경우 MainActivity.cs에 추가 해야 하는 다음 코드에 의해 처리 됩니다.In the case of Android it is handled by following code, which should be added to MainActivity.cs:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
  base.OnActivityResult(requestCode, resultCode, data);
  AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs(requestCode, resultCode, data);
}

Windows Phone에 대 한 연속 처리Handle continuation for Windows Phone

Windows Phone 아래 코드를 사용 하 여 App.xaml.cs 파일에서 OnActivated 메서드를 수정 합니다.For Windows Phone modify the OnActivated method in the App.xaml.cs file with the below code:

protected override void OnActivated(IActivatedEventArgs args)
{
#if WINDOWS_PHONE_APP
  if (args is IWebAuthenticationBrokerContinuationEventArgs)
  {
     WebAuthenticationBrokerContinuationHelper.SetWebAuthenticationBrokerContinuationEventArgs(args as IWebAuthenticationBrokerContinuationEventArgs);
  }
#endif
  base.OnActivated(args);
}

이제 응용 프로그램을 실행 하면 인증 대화 상자가 표시 됩니다.Now if you run the application, you should see an authentication dialog. 인증에 성공 하면 리소스에 액세스할 수 있는 권한을 요청 합니다 (이 경우 Graph API).Upon successful authentication, it will ask your permissions to access the resources (in our case Graph API):

인증에 성공 하 고 리소스에 액세스 하도록 앱에 권한을 부여한 경우 authResult에서 AccessTokenRefreshToken 콤보 상자를 가져와야 합니다.If authentication is successful and you’ve authorized the app to access the resources, you should get an AccessToken and RefreshToken combo in authResult. 이러한 토큰은 추가 API 호출에 필요 하며 백그라운드에서 Azure Active Directory 권한 부여를 위해 필요 합니다.These tokens are required for further API calls and for authorization with Azure Active Directory behind the scenes.

예를 들어 아래 코드를 사용 하 여 Active Directory에서 사용자 목록을 가져올 수 있습니다.For example, the code below allows you to get a user list from Active Directory. Web API URL을 Azure AD로 보호 되는 Web API로 바꿀 수 있습니다.You can replace the Web API URL with your Web API which is protected by Azure AD.

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get,
    "https://graph.windows.net/tendulkar.onmicrosoft.com/users?api-version=2013-04-05");
request.Headers.Authorization =
  new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
var response = await client.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();