Sie müssen Microsoft.IdentityModel.Clients.ActiveDirectory verwenden;
Eine gute Proben gegeben in https://azure.microsoft.com/en-us/documentation/articles/active-directory-appmodel-v2-overview/
Der Schritt, den Sie für eine App Modell V2 Anmeldung in Anspruch nehmen müssen, sind:
- Ihre Anwendung registrieren, die Anwendung Anmeldeportal auf https://apps.dev.microsoft.com verwenden. Merken Sie sich die clientID und clientsecret, die für Sie registriert sind.
- ein asp.net in VS2015 erstellen ohne Authentifizierung (anonym)
- Fügen Sie den Nuget Paket Microsoft.IdentityModel.Clients.ActiveDirectory
- In der Steuerung
- Sie müssen mit Microsoft.IdentityModel.Clients.ActiveDirectory zu hinzufügen Umfang an Ihrem Code als Privat Mitglied
private static string [] Tive = { "https://graph.microsoft.com/calendars.readwrite"};
Fügen Sie die folgenden Einstellungen hinzufügen
<add key="ida:ClientID" value="..." />
<add key="ida:ClientSecret" value="..." />
Sie müssen web.config 2 zusätzliche Methoden erstellen. Eine für die signin und eine für das Autorisieren:
Signin:
public async Task<ActionResult> SignIn()
{
string authority = "https://login.microsoftonline.com/common/v2.0";
string clientId = System.Configuration.ConfigurationManager.AppSettings["ida:ClientID"];
AuthenticationContext authContext = new AuthenticationContext(authority);
// The url in our app that Azure should redirect to after successful signin
Uri redirectUri = new Uri(Url.Action("Authorize", "Home", null, Request.Url.Scheme));
// Generate the parameterized URL for Azure signin
Uri authUri = await authContext.GetAuthorizationRequestUrlAsync(scopes, additionalScopes, clientId,
redirectUri, UserIdentifier.AnyUser, null);
// Redirect the browser to the Azure signin page
return Redirect(authUri.ToString());
}
Autorisieren:
public async Task<ActionResult> Authorize()
{
// Get the 'code' parameter from the Azure redirect
string authCode = Request.Params["code"];
string authority = "https://login.microsoftonline.com/common/v2.0";
string clientId = System.Configuration.ConfigurationManager.AppSettings["ida:ClientID"];
string clientSecret = System.Configuration.ConfigurationManager.AppSettings["ida:ClientSecret"];
AuthenticationContext authContext = new AuthenticationContext(authority);
// The same url we specified in the auth code request
Uri redirectUri = new Uri(Url.Action("Authorize", "Home", null, Request.Url.Scheme));
// Use client ID and secret to establish app identity
ClientCredential credential = new ClientCredential(clientId, clientSecret);
try
{
// Get the token
var authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(
authCode, redirectUri, credential, scopes);
// Save the token in the session
Session["access_token"] = authResult.Token;
return Redirect(Url.Action("Tasks", "Home", null, Request.Url.Scheme));
}
catch (AdalException ex)
{
return Content(string.Format("ERROR retrieving token: {0}", ex.Message));
}
}
Die accestoken ist in einem Sitzungszustand.
Jetzt können Sie graph.microsoft.com rufen mit dem richtigen accesstoken und die Daten erhalten:
private async Task<List<DisplayEvent>> GetEvents()
{
List<DisplayEvent> tasks = new List<DisplayEvent>();
HttpClient httpClient = new HttpClient();
var accessToken = (string)Session["access_token"];
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await httpClient.GetAsync("https://graph.microsoft.com/beta/users/me/events");
if (response.IsSuccessStatusCode)
{
string s = await response.Content.ReadAsStringAsync();
JavaScriptSerializer serializer = new JavaScriptSerializer();
EventModels eventList = serializer.Deserialize<EventModels>(s);
foreach (EventModel v in eventList.value)
{
//Fill tasks will events
}
}
return tasks;
}