SlideShare a Scribd company logo
1 of 77
An introduction to Microsoft Graph
for developers
PartII – AdvancedTopics
Identity Developer Advisors
November 21st, 2019 Kalyan Krishna
Sr Program Manager-Identity Division
kalyankrishna1
https://www.youtube.com/watch?v=EBbnpFdB92A
 What is Microsoft Graph?
 Why did we build Microsoft Graph?
 Common Scenarios
 Developing applications for Microsoft Graph
 The app topology
 Permissions & Consent
 SDKs
 The app patterns
 Code walkthrough – Manage Users
 The Big Picture
PAGE 3
Microsoft Graph: gateway to your data in the Microsoft cloud
Single API for:
1.Accessing data
/me, /users, /groups, /messages, /drive, ….
2.Traversing data
/drive/items/<id>/lastmodifiedByUser
3.Accessing insights
/insights/trending
4.Work/School and Personal
Accounts
What is Microsoft Graph?
https://graph.microsoft.com/
Try it now..
Microsoft Graph Explorer – https://aka.ms/ge
Microsoft Graph
https://graph.microsoft.com/
Insights and relationships
Calendar
Personal
Contacts
Files Notes
Org
Contacts
NotesPeopleUsers ExcelTasksMailGroups
Data
XCode
Eclipse or
Android Studio
Visual Studio REST
Development
Environment
YOUR APP
Your choice of technology (.NET, JS, HTML, Ruby, etc.)
Microsoft Azure
Other hosting
(IIS, LAMP, etc.)
Solution
Authentication
and Authorization OpenID Connect and OAuth 2.0
Users can consent for their data or admin can consent for all users Only admin can consent
Delegated
permissions
App
Permissions
App
permissions
Permission type: applicationPermission type: delegated
Get access on behalf of users Get access as a service
Effective permissionEffective permission
https://aka.ms/ConsentAndPermissions
scope
scope
scope
https://docs.microsoft.com/graph/sdks/sdks-overview
Microsoft Graph SDKs, samples and tooling
• Provides support for common tasks such
as
• Models and request builders for
entities
• Paging through collections.
• Creating batch requests.
• More..
• Embedded support for
• Retry handling
• Secure redirects
• Payload compression
• More..
Improve your application's interactions with
Microsoft Graph, without adding complexity
• Designed to simplify building high-
quality, efficient, and resilient
applications that access Microsoft
Graph
• Available to be included in your
projects via GitHub and popular
platform package managers
• The library contains models and
request builders that are generated
from Microsoft Graph metadata
Microsoft Graph SDKs
• For .NET, separate SDKs available for:
• /V1.0 - https://graph.microsoft.com/v1.0/$metadata
• /beta - https://graph.microsoft.com/beta/$metadata
Microsoft Graph .NET Authentication Provider Library
 Microsoft Graph .NET authentication library provides a set of
OAuth scenario-centric authentication providers that implement
Microsoft.Graph.IAuthenticationProvider
 Uses Microsoft Authentication Library (MSAL) under the hood to
handle access token acquisition and storage.
 Its still in prerelease, so , use the –prerelease flag in Nuget fetch
Install-Package Microsoft.Graph.Auth -PreRelease
Aboutthissession
Objectives
• Harness the power of Graph beyond the REST Api.
• Build more resilient, performant and fault-tolerant applications.
Topics
• Using the Graph SDK
• Pagination
• Optimizations
• Change Tracking
• Delta Queries
• Notifications
• Batching
• Throttling & Error Handling
• Extending Graph
Prerequisitesforcoding:
Get a free Azure AD tenant for development purposes
https://aka.ms/o365devprogram
The Code from previous session:
https://gist.github.com/kalyankrishna1/0a6ea6d00a09f7ae81c89960e1038d79
For Change notifications, we’d use the following sample, please download:
https://github.com/microsoftgraph/msgraph-training-changenotifications
We’d use ngrok to demo notifications. Register and download the free tool from :
https://ngrok.com/
The updated code for this session:
https://gist.github.com/kalyankrishna1/997f7ca1af1f73f8107c1c8cebfbaf3f
To build an app..
• Use Graph explorer and the Docs to:
• Locate all the Apis you’d need to call
• Locate all the permissions your app will be requesting
• Register your app with the identity platform
• Configure app permissions
• Use MSAL for sign-in and get a token for Graph
• Make calls using Graph SDK (preferred) or REST APIs
directly
profile
GET: /users/kkrishna
{
"displayName": "Kalyan Krishna",
"givenName": "Kalyan",
"jobTitle": "SENIOR PROGRAM MANAGER",
}
GET: /users/kkrishna/photo/$value
GET: /users/kkrishna/manager
{"displayName": “Beatriz…}
GET: /users/kkrishna/directReports
"value" : [
{"displayName": “Tiago…},
{"displayName": “Mani…}
]
GET: /me/memberOf/…
"value" : [
{"displayName": “Microsoft Graph…},
{"displayName": “Azure AD Identity Champs…}]
Beatriz
manager
Tiago Mani
directReports
Groups
memberOf
With the
SDK
// Initialize and prepare MSAL
[Redacted]
// Initialize the Graph SDK authentication provider
InteractiveAuthenticationProvider authenticationProvider =
new InteractiveAuthenticationProvider(app, scopes);
GraphServiceClient graphServiceClient =
new GraphServiceClient(authenticationProvider);
// Call the /me Api
var me = graphServiceClient.Me.Request().GetAsync().Result;
Console.WriteLine($"Display Name from /me-{me.DisplayName}");
Pagination
Graph uses server-side
page size limits
When querying
collections, Graph may
return the results in
many pages
Always expect an
@odata.nextLink
property in the response
Contains the URL to the next page
Request
1.
Always handle the
possibility that the
responses are paged
in nature
2.
Follow the
@odata.nextLink
to obtain the next
page of results
3.
Final page will not
contain an
@odata.nextLink
property
4.
Treat the entire URL
as an opaque string
Easier
with SDK
// call /me/memberOf Api
var mygroups = await graphServiceClient.Me.MemberOf.Request().GetAsync();
int pagenum = 1;
if (mygroups != null){
do
{
// Page through results
foreach (var directoryObject in mygroups.CurrentPage)
{
if (directoryObject is Group)
{
Group group = directoryObject as Group;
Console.WriteLine($"Page #-{pagenum}- Group:{group.DisplayName}");
}
}
// are there more pages (Has a @odata.nextLink ?)
if (mygroups.NextPageRequest != null)
{
mygroups = await mygroups.NextPageRequest.GetAsync();
pagenum++;
}
else
{
mygroups = null;
}
} while (mygroups != null);
}
Querying data | Use projections
GET https://graph.microsoft.com/v1.0/users?
$select=givenName,mail
Choose the properties your
app really needs and no
more
Don’t send
unnecessary data over
the wire
Tip
Use $select
Querying data | Use filters
GET https://graph.microsoft.com/v1.0/users?
$filter=department eq ‘Sales’ & $select=givenName,mail
Choose the records your
app really needs and no
more
Don’t send
unnecessary data over
the wire
Tip
Use $filter
POST/PATCH/PUT | no response required
If your code doesn’t need
to get a response, then opt
out
Don’t send
unnecessary data over
the wire
Tip
Use HTTP
Prefer return=minimal
request header
Track changes | Delta query
Scenario
Need to cache or store Microsoft
Graph data locally, and keep that
data up to date, or track changes to
data for any other reasons
Tip
Use delta query
Why
Stop retrieving data your application already has!
Minimizes network traffic
Reduces the likelihood of reaching a throttling
threshold
https://docs.microsoft.com/en-us/graph/delta-query-overview
Allows retrieving changes since you last requested them
Check the Delta query overview page for supported resources
Use the /delta function to request changes
Store returned the deltaLink for subsequent requests
Use $select to narrow what you want changes for
Track changes | Delta query
Track changes | Webhooks
Scenario
Client apps use notifications to
update their state upon changes
Tip
Use webhook
notifications as the
trigger to make
delta query calls
Why
Difficult to figure out optimal polling interval
• Translate an email when it arrives
• Start a Flow when a document is X many months old
• Create new user accounts in your application when a user joins an
organization
Track changes | Webhooks
Example
Scenarios
Microsoft Graph webhook subscriptions – high level overview
Groups
FilesCalendar
Messages
Meetings
User
People
Devices
Coworkers
Insights
Chats
Teams
Tasks
Microsoft
Graph
Subscription request1
Subscription response – HTTP 201 Created2
Notifications3
Supported
resources
• Outlook message
• Outlook event
• Outlook personal contact
• user
• group
• Office 365 group conversation
• Content within the hierarchy of any folder driveItem on a user's
personal OneDrive
• Content within the hierarchy of the root folder driveItem on
OneDrive for Business
• Security alert
Check the webhooks docs for the latest list of supported resources.
Token validation and notification responses
Application https://graph.microsoft.com/v1.0https://contoso.com/api
HTTP POST /subscriptions + subscription in body
HTTP POST ?validationToken=XYZ
HTTP 200 OK + token in body
HTTP 201 CREATED + subscription in body
HTTP POST + notifications in body
HTTP 202 ACCEPTED
HTTP GET resource
HTTP 200 OK + resource
WebHooks create request example
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"resource": "/users",
"changeType": "updated",
"clientState": "SecretClientState",
"notificationUrl": "https://dfa2c56c.ngrok.io/api/notifications",
"expirationDateTime": "2019-22-23T15:41:22.3774877+00:00"
}
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
POST https://68c75850.ngrok.io/api/notifications
{
"value": [
{
"changeType": "updated",
"clientState": "SecretClientState",
"resource": "Users/695a3e1d-2e9f-4d24-aa3c-ac795c16f25c",
"resourceData": {
"@odata.type": "#Microsoft.Graph.User",
"@odata.id": "Users/695a3e1d-2e9f-4d24-aa3c-ac795c16f25c",
"id": "695a3e1d-2e9f-4d24-aa3c-ac795c16f25c",
"organizationId": "979f4440-75dc-4664-b2e1-2cafa0ac67d1",
"sequenceNumber": 637048551305855700
},
"subscriptionExpirationDateTime": "2019-09-23T17:09:24.8176341+00:00",
"subscriptionId": "9697c441-8375-4651-9c5a-bb85b9da005a",
"tenantId": "979f4440-75dc-4664-b2e1-2cafa0ac67d1"
}
]
}
WebHooks notification
https://github.com/microsoftgraph/msgraph-training-changenotifications
https://ngrok.com/
https://docs.microsoft.com/en-us/graph/throttling
• You should expect throttling and
handle it with retries.
• Microsoft Graph returns status code
429 and a retry-after value.
• Limits on read operations are much
higher than on write.
• When using /$batch, errors are
returned for individual requests
Throttling HTTP/1.1 200 OK <- the batch request was successful, however
some requests may have failed
{"responses": [ {
"id": “myRequest1",
"status":429, <-this request was throttled and should be
retried
"headers" : {"Retry-After":"9"},
“body”: {
"error": {
"code": "TooManyRequests",
} } },
{
"id": “myRequest2",
"status":204, <-this request succeeded
“body": {
…
} }
]}
Easier
with SDK
var messages = await graphServiceClient.Me.Messages.Request()
.WithMaxRetry(5)
.WithScopes(new string[] { "Mail.Read" })
.GetAsync();
Throttling
Error Best practice
403 How did this happen? My application got consent!
The signed-in user does not have privileges to access the resource requested.
Tip: Provide a generic "Access denied" error back to the signed-in user.
404 How did this happen? I just got this resource!
Resource not yet provisioned (like a user's photo)
Resource has been deleted
Tip: Watch for restore - your application should also take this into account.
429 Your app should always be prepared to be throttled.
Tip: Honor the HTTP Retry-After response header to recover
Tip: Rate limit to stay below throttle limits
503 Service is busy
Tip: Retry – but employ a back-off strategy similar to 429
Tip: Additionally, always make new retry requests over a new HTTP connection
Handle expected errors
https://docs.microsoft.com/en-us/graph/json-batching
Batching
Scenario
Mobile client app needs to get
signed-in user’s profile AND avatar
Tip
Use JSON batching
Why
Performance gains through multiplexing
Save the application significant network latency
Conserves connection resources
Lower bandwidth consumption
https://aka.ms/gb
https://docs.microsoft.com/en-us/graph/extensibility-overview
Extending Microsoft Graph
Add app specific user
profile data
Your app
Data
Your app
Open extensions - a flexible way to add untyped app data directly to a resource instance.
extensionName is the only pre-defined, writeable property, must be unique within the tenant
Schema extensions - Define schema extension definition and extend resource instances with
strongly-typed custom data.
The schema discoverable and shareable, can be used in filtering.
https://docs.microsoft.com/en-us/graph/extensibility-overview
Adding custom data to resources in Microsoft-Graph
https://docs.microsoft.com/en-us/graph/extensibility-open-users
Open
Extensions
• Open extensions, are accessible through the extensions
navigation property of the resource instance
• The extensionName property is the only pre-defined, writable
property in an open extension
• When creating an open extension, you must assign the
extensionName property a name that is unique within the
tenant.
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
Create Request
POST https://graph.microsoft.com/v1.0/me/extensions
Content-type: application/json
{
"@odata.type":"microsoft.graph.openTypeExtension",
"extensionName":"com.contoso.roamingSettings",
"theme":"dark",
"color":"purple",
"lang":"Japanese"
}
Open extensions example
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
Creation Response
HTTP/1.1 201 Created
Content-type: application/json
{
"@odata.type": "#microsoft.graph.openTypeExtension",
"extensionName": "com.contoso.roamingSettings",
"id": "com.contoso.roamingSettings",
"theme": "dark",
"color": "purple",
"lang": "Japanese"
}
Open extensions example
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
Update the data in the open extension
Request
PATCH https://graph.microsoft.com/v1.0/me/extensions/com.contoso.roamingSettings
Content-type: application/json
{
"theme": "light",
"color": "yellow",
"lang": "Swahili"
}
Response
HTTP/1.1 204 No content
Open extensions example
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
Retrieve roaming profile information
Request
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail,mobilePhone&$expand=extensions
Response
HTTP/1.1 200 OK
Content-Type: application/json
Content-length: 420
{
"id": "84b80893-8749-40a3-97b7-68513b600544",
"displayName": "John Smith",
"mail": "john@contoso.com",
"mobilePhone": "1-555-6589",
"extensions": [
{
"@odata.type": "#microsoft.graph.openTypeExtension",
"extensionName": "com.contoso.roamingSettings",
"id": "com.contoso.roamingSettings",
"theme": "dark",
"color": "purple",
"lang": "Japanese"
}
]
}
Open extensions example
https://docs.microsoft.com/en-us/graph/extensibility-schema-groups
Schema
Extensions
Versatility
Define schema extension definition and extend resource instances with strongly-typed custom data.
Discoverable by other apps via status property
Schema extensions are complex types, enabling use of HTTP verbs:
• POST to specify custom data when creating a new resource instance
• GET to read the custom data
• PATCH to add or update in an existing resource instance
• PATCH to set the complex type to null, deleting the custom data
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
View existing schema extensions
POST GET https://graph.microsoft.com/v1.0/schemaExtensions?$filter=id eq
'graphlearn_test’
Content-type: application/json
{
"value": [
{
"id": "graphlearn_test",
"description": "Yet another test schema",
"targetTypes": [
"User",
"Group"
],
"status": "Available",
"owner": "24d3b144-21ae-4080-943f-7067b395b913",
"properties": [
{
"name": "testName",
"type": "String"
}
]
}
]
}
Schema extensions example
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
Register a new schema extension - Request
POST https://graph.microsoft.com/v1.0/schemaExtensions
Content-type: application/json
{
"id": "graphlearn_courses",
"description": "Graph Learn training courses extensions",
"targetTypes": [
"Group"
],
"properties": [
{
"name": "courseId",
"type": "Integer"
},
{
"name": "courseName",
"type": "String"
},
{
"name": "courseType",
"type": "String"
}
]
}
Schema extensions example
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
Register a new schema extension – Response
HTTP/1.1 201 Created
Content-length: 420
Content-type: application/json
{
"id": "graphlearn_courses",
"description": "Graph Learn training courses extensions",
"targetTypes": [
"Group"
],
"status": "InDevelopment",
"owner": "24d3b144-21ae-4080-943f-7067b395b913",
"properties": [
{
"name": "courseId",
"type": "Integer"
},
{
"name": "courseName",
"type": "String"
},
{
"name": "courseType",
"type": "String"
}
]
}
Schema extensions example
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
Populate a schema extension (a group)
Request
POST https://graph.microsoft.com/v1.0/groups
Content-Type: application/json
{
"displayName": "New Managers March 2017",
"description": "New Managers training course for March 2017",
"groupTypes": [ "Unified" ],
"mailEnabled": true,
"mailNickname": "newMan201703",
"securityEnabled": false,
"graphlearn_courses": {
"courseId": "123",
"courseName": "New Managers",
"courseType": "Online"
}
}
Schema extensions example
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
Populate a schema extension (a group)
Response
POST https://graph.microsoft.com/v1.0/groups
HTTP/1.1 201 Created
Content-length: 420
Content-Type: application/json
{
"id": "dfc8016f-db97-4c47-a582-49cb8f849355",
"createdDateTime": "2017-02-09T00:17:05Z",
"description": "New Managers training course for March 2017",
"displayName": "New Managers March 2017",
"groupTypes": [
"Unified"
],
"mail": "newMan201703@graphlearn.com",
"mailEnabled": true,
"mailNickname": "newMan201703",
"securityEnabled": false,
"theme": null,
"visibility": "Public"
}
Schema extensions example
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions
Add update and remove data in a schema extension (a group)
Request
PATCH https://graph.microsoft.com/v1.0/groups/dfc8016f-db97-4c47-a582-49cb8f849355
Content-length: 230
Content-Type: application/json
{
"graphlearn_courses": {
"courseId": "123",
"courseName": "New Managers",
"courseType": "Online"
}
}
Response
HTTP/1.1 204 No Content
Schema extensions example
Microsoft NDA Confidential
Identity and Security Collaborative Engineering
Next Steps
• Visit our docs @ https://aka.ms/graph
• Connect with us via:
• Ask questions to the team:
https://stackoverflow.com/questions/tagged/microsoft-graph
• Submit new feature and service requests @ https://feedback.azure.com
Microsoft Confidential
Engage with us!
Topic Feedback type Forum URL Who supports
All identity developer
topics (Auth libraries, MS
Graph, App Registration
portals)
Community-driven
developer Support for
Questions and Answers
Stack Overflow
https://stackoverflow.com/questions/tagged/azu
re-active-directory+or+microsoft-
graph+or+azure-ad-conditional-access
Supported by Microsoft and
community
Authentication Libraries –
ADAL, MSAL, Auth
Middleware
Library issues, bugs, open
source contributions
GitHub
https://docs.microsoft.com/azure/active-
directory/develop/active-directory-
authentication-libraries
Azure AD teams manage issues, bugs
and review/ approve contribution
Azure AD, MS
Graph, Libraries, App
Registration – Developer
Experiences
Feature requests,
suggestions for product
improvements
Azure Feedback
Azure Feedback for Authentication and also
AppRegFeedback@microsoft.com for portal
specific feedback. User Voice for Microsoft
Graph
Azure AD teams triage feature
requests
All identity developer
topics (Auth libraries, MS
Graph, App Registration
portals)
Discussion with other
MVPs and NDA
community
Yammer Identity
Developer Advisors
https://www.yammer.com/azureadvisors/#/threa
ds/inGroup?type=in_group&feedId=5800064
Engagement with Identity Advisors
and Microsoft product groups
Identity developer topics
for Auth
Delve deep into complex
identity related
development topics live Community Office Hours
azuread Twitter handle and the
Microsoft Tech community
Opportunity to make questions and
answers in real time to product teams
via live conference
All developer topics Assisted support for
developers
Customer Service and
Support
More information on support options:
https://aka.ms/devexhelpsupport
Direct 1:1 help from our support
engineering teams
References
and Samples
• Install the Microsoft Graph SDKs
• Authentication Providers for Microsoft Graph .NET SDK
• Graph SDK design
• Microsoft Graph Uservoice
• Best practices for working with Microsoft Graph
• Use query parameters to customize responses
• Combine multiple requests in one HTTP call using JSON batching
• BatchRequestContent
• Add custom data to resources using extensions
• Configuring directory extension optional claims
• Microsoft Graph resources
• Microsoft Graph SDK beta
• Office 365 Developer Program
• Paging Microsoft Graph data in your app
Join the Developer Program
Benefits
Free renewable Office 365 E3 subscription
Be your own admin
Dev sandbox creation tools
Preload sample users and data for Microsoft Graph, and more
Access to Microsoft 365 experts
Join bootcamps and monthly community calls
Tools, training and documentation
Learn, discover and explore about Office 365 development
Blogs, newsletters and social
Stay up to date with the community
https://aka.ms/o365devprogram
Microsoft Graph
Gateway to your data in the Microsoft cloud
Users, Groups, Organizations
Outlook
SharePoint
OneDrive
Teams
Planner
Excel
OneNote
Activities
Device Relay
Commands
Notifications
Azure AD
Intune
Identity Manager
Advanced Threat Analytics
Advanced Threat Protection
Mail, Calendar,
Contacts and Tasks
Sites and Lists
Drives and Files
Channels, Messages
Tasks and Plans
Spreadsheets
Notes, and more…
Identity Management
Access Control
Synchronization
Domains
Administrative Units
Applications and Devices
Advanced Threat Analytics
Advanced Threat Protection
Alerts
Policies
and more…
Office 365 Windows 10 Enterprise Mobility + Security
https://graph.microsoft.com
Dynamics 365
Business Central

More Related Content

What's hot

Getting started with ms graph api
Getting started with ms graph apiGetting started with ms graph api
Getting started with ms graph apiJasjit Chopra
 
Distributed stream processing with Apache Kafka
Distributed stream processing with Apache KafkaDistributed stream processing with Apache Kafka
Distributed stream processing with Apache Kafkaconfluent
 
Azure App configuration
Azure App configurationAzure App configuration
Azure App configurationMuhammad Sajid
 
Building secure applications with keycloak
Building secure applications with keycloak Building secure applications with keycloak
Building secure applications with keycloak Abhishek Koserwal
 
WEBINAR: OWASP API Security Top 10
WEBINAR: OWASP API Security Top 10WEBINAR: OWASP API Security Top 10
WEBINAR: OWASP API Security Top 1042Crunch
 
Introduction to Kong API Gateway
Introduction to Kong API GatewayIntroduction to Kong API Gateway
Introduction to Kong API GatewayYohann Ciurlik
 
Kafka Security 101 and Real-World Tips
Kafka Security 101 and Real-World Tips Kafka Security 101 and Real-World Tips
Kafka Security 101 and Real-World Tips confluent
 
Introducing Confluent labs Parallel Consumer client | Anthony Stubbes, Confluent
Introducing Confluent labs Parallel Consumer client | Anthony Stubbes, ConfluentIntroducing Confluent labs Parallel Consumer client | Anthony Stubbes, Confluent
Introducing Confluent labs Parallel Consumer client | Anthony Stubbes, ConfluentHostedbyConfluent
 
Step-by-Step Introduction to Apache Flink
Step-by-Step Introduction to Apache Flink Step-by-Step Introduction to Apache Flink
Step-by-Step Introduction to Apache Flink Slim Baltagi
 
OAuth & OpenID Connect Deep Dive
OAuth & OpenID Connect Deep DiveOAuth & OpenID Connect Deep Dive
OAuth & OpenID Connect Deep DiveNordic APIs
 
Exactly-once Stream Processing with Kafka Streams
Exactly-once Stream Processing with Kafka StreamsExactly-once Stream Processing with Kafka Streams
Exactly-once Stream Processing with Kafka StreamsGuozhang Wang
 
Introduction to Spring Cloud
Introduction to Spring Cloud           Introduction to Spring Cloud
Introduction to Spring Cloud VMware Tanzu
 
Apache Kafka® Security Overview
Apache Kafka® Security OverviewApache Kafka® Security Overview
Apache Kafka® Security Overviewconfluent
 
What is an API Gateway?
What is an API Gateway?What is an API Gateway?
What is an API Gateway?LunchBadger
 
Introducción a Wiremock
Introducción a WiremockIntroducción a Wiremock
Introducción a WiremockJose Ortiz
 
Azure AD B2C Webinar Series: Identity Protocols OIDC and OAuth2 part 1
Azure AD B2C Webinar Series: Identity Protocols OIDC and OAuth2 part 1Azure AD B2C Webinar Series: Identity Protocols OIDC and OAuth2 part 1
Azure AD B2C Webinar Series: Identity Protocols OIDC and OAuth2 part 1Vinu Gunasekaran
 
OAuth2 - Introduction
OAuth2 - IntroductionOAuth2 - Introduction
OAuth2 - IntroductionKnoldus Inc.
 
Introduction to OpenID Connect
Introduction to OpenID Connect Introduction to OpenID Connect
Introduction to OpenID Connect Nat Sakimura
 

What's hot (20)

Getting started with ms graph api
Getting started with ms graph apiGetting started with ms graph api
Getting started with ms graph api
 
Distributed stream processing with Apache Kafka
Distributed stream processing with Apache KafkaDistributed stream processing with Apache Kafka
Distributed stream processing with Apache Kafka
 
Azure App configuration
Azure App configurationAzure App configuration
Azure App configuration
 
Building secure applications with keycloak
Building secure applications with keycloak Building secure applications with keycloak
Building secure applications with keycloak
 
WEBINAR: OWASP API Security Top 10
WEBINAR: OWASP API Security Top 10WEBINAR: OWASP API Security Top 10
WEBINAR: OWASP API Security Top 10
 
Introduction to Kong API Gateway
Introduction to Kong API GatewayIntroduction to Kong API Gateway
Introduction to Kong API Gateway
 
Kafka Security 101 and Real-World Tips
Kafka Security 101 and Real-World Tips Kafka Security 101 and Real-World Tips
Kafka Security 101 and Real-World Tips
 
Introducing Confluent labs Parallel Consumer client | Anthony Stubbes, Confluent
Introducing Confluent labs Parallel Consumer client | Anthony Stubbes, ConfluentIntroducing Confluent labs Parallel Consumer client | Anthony Stubbes, Confluent
Introducing Confluent labs Parallel Consumer client | Anthony Stubbes, Confluent
 
Step-by-Step Introduction to Apache Flink
Step-by-Step Introduction to Apache Flink Step-by-Step Introduction to Apache Flink
Step-by-Step Introduction to Apache Flink
 
OAuth & OpenID Connect Deep Dive
OAuth & OpenID Connect Deep DiveOAuth & OpenID Connect Deep Dive
OAuth & OpenID Connect Deep Dive
 
Exactly-once Stream Processing with Kafka Streams
Exactly-once Stream Processing with Kafka StreamsExactly-once Stream Processing with Kafka Streams
Exactly-once Stream Processing with Kafka Streams
 
Keycloak SSO basics
Keycloak SSO basicsKeycloak SSO basics
Keycloak SSO basics
 
Introduction to Spring Cloud
Introduction to Spring Cloud           Introduction to Spring Cloud
Introduction to Spring Cloud
 
Apache Kafka® Security Overview
Apache Kafka® Security OverviewApache Kafka® Security Overview
Apache Kafka® Security Overview
 
MuleSoft JWT Demystified
MuleSoft JWT DemystifiedMuleSoft JWT Demystified
MuleSoft JWT Demystified
 
What is an API Gateway?
What is an API Gateway?What is an API Gateway?
What is an API Gateway?
 
Introducción a Wiremock
Introducción a WiremockIntroducción a Wiremock
Introducción a Wiremock
 
Azure AD B2C Webinar Series: Identity Protocols OIDC and OAuth2 part 1
Azure AD B2C Webinar Series: Identity Protocols OIDC and OAuth2 part 1Azure AD B2C Webinar Series: Identity Protocols OIDC and OAuth2 part 1
Azure AD B2C Webinar Series: Identity Protocols OIDC and OAuth2 part 1
 
OAuth2 - Introduction
OAuth2 - IntroductionOAuth2 - Introduction
OAuth2 - Introduction
 
Introduction to OpenID Connect
Introduction to OpenID Connect Introduction to OpenID Connect
Introduction to OpenID Connect
 

Similar to An introduction to Microsoft Graph for developers

Microsoft graph and power platform champ
Microsoft graph and power platform   champMicrosoft graph and power platform   champ
Microsoft graph and power platform champKumton Suttiraksiri
 
SharePoint Saturday Chicago - Everything your need to know about the Microsof...
SharePoint Saturday Chicago - Everything your need to know about the Microsof...SharePoint Saturday Chicago - Everything your need to know about the Microsof...
SharePoint Saturday Chicago - Everything your need to know about the Microsof...Sébastien Levert
 
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...Sébastien Levert
 
Create cross-platform apps that interact with Microsoft Graph and Office 365 ...
Create cross-platform apps that interact with Microsoft Graph and Office 365 ...Create cross-platform apps that interact with Microsoft Graph and Office 365 ...
Create cross-platform apps that interact with Microsoft Graph and Office 365 ...Codemotion
 
SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...
SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...
SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...Sébastien Levert
 
Microsoft Graph API - A Single Stop For Your Cloud Solution
Microsoft Graph API - A Single Stop For Your Cloud SolutionMicrosoft Graph API - A Single Stop For Your Cloud Solution
Microsoft Graph API - A Single Stop For Your Cloud SolutionDipti Chhatrapati
 
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...Sébastien Levert
 
Power of Microsoft Graph API by Nilesh Shah SharePoint Saturday Toronto 2017
Power of Microsoft Graph API by Nilesh Shah SharePoint Saturday Toronto 2017Power of Microsoft Graph API by Nilesh Shah SharePoint Saturday Toronto 2017
Power of Microsoft Graph API by Nilesh Shah SharePoint Saturday Toronto 2017Nilesh Shah
 
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...European Collaboration Summit
 
Overview Of Kaizala Extensibility and Programmability
Overview Of Kaizala Extensibility and ProgrammabilityOverview Of Kaizala Extensibility and Programmability
Overview Of Kaizala Extensibility and ProgrammabilityVijai Anand Ramalingam
 
O365Con18 - Reach for the Cloud Build Solutions with the Power of Microsoft G...
O365Con18 - Reach for the Cloud Build Solutions with the Power of Microsoft G...O365Con18 - Reach for the Cloud Build Solutions with the Power of Microsoft G...
O365Con18 - Reach for the Cloud Build Solutions with the Power of Microsoft G...NCCOMMS
 
Microsoft Graph and Azure Functions - SharePoint User Group Frankfurt
Microsoft Graph and Azure Functions - SharePoint User Group FrankfurtMicrosoft Graph and Azure Functions - SharePoint User Group Frankfurt
Microsoft Graph and Azure Functions - SharePoint User Group FrankfurtDragan Panjkov
 
Granite state #spug The #microsoftGraph and #SPFx on steroids with #AzureFunc...
Granite state #spug The #microsoftGraph and #SPFx on steroids with #AzureFunc...Granite state #spug The #microsoftGraph and #SPFx on steroids with #AzureFunc...
Granite state #spug The #microsoftGraph and #SPFx on steroids with #AzureFunc...Vincent Biret
 
How to use Microsoft Graph in your applications
How to use Microsoft Graph in your applicationsHow to use Microsoft Graph in your applications
How to use Microsoft Graph in your applicationsMohamed Ashiq Faleel
 
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...Sébastien Levert
 
Microsoft Graph community call-October 2018
Microsoft Graph community call-October 2018Microsoft Graph community call-October 2018
Microsoft Graph community call-October 2018Microsoft 365 Developer
 
Microsoft Azure For Solutions Architects
Microsoft Azure For Solutions ArchitectsMicrosoft Azure For Solutions Architects
Microsoft Azure For Solutions ArchitectsRoy Kim
 
#SPSottawa The SharePoint Framework and The Microsoft Graph on steroids with ...
#SPSottawa The SharePoint Framework and The Microsoft Graph on steroids with ...#SPSottawa The SharePoint Framework and The Microsoft Graph on steroids with ...
#SPSottawa The SharePoint Framework and The Microsoft Graph on steroids with ...Vincent Biret
 
#SPSToronto The SharePoint Framework and the Microsoft Graph on steroids with...
#SPSToronto The SharePoint Framework and the Microsoft Graph on steroids with...#SPSToronto The SharePoint Framework and the Microsoft Graph on steroids with...
#SPSToronto The SharePoint Framework and the Microsoft Graph on steroids with...Vincent Biret
 

Similar to An introduction to Microsoft Graph for developers (20)

Microsoft graph and power platform champ
Microsoft graph and power platform   champMicrosoft graph and power platform   champ
Microsoft graph and power platform champ
 
SharePoint Saturday Chicago - Everything your need to know about the Microsof...
SharePoint Saturday Chicago - Everything your need to know about the Microsof...SharePoint Saturday Chicago - Everything your need to know about the Microsof...
SharePoint Saturday Chicago - Everything your need to know about the Microsof...
 
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
 
Xamarin microsoft graph
Xamarin microsoft graphXamarin microsoft graph
Xamarin microsoft graph
 
Create cross-platform apps that interact with Microsoft Graph and Office 365 ...
Create cross-platform apps that interact with Microsoft Graph and Office 365 ...Create cross-platform apps that interact with Microsoft Graph and Office 365 ...
Create cross-platform apps that interact with Microsoft Graph and Office 365 ...
 
SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...
SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...
SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...
 
Microsoft Graph API - A Single Stop For Your Cloud Solution
Microsoft Graph API - A Single Stop For Your Cloud SolutionMicrosoft Graph API - A Single Stop For Your Cloud Solution
Microsoft Graph API - A Single Stop For Your Cloud Solution
 
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
 
Power of Microsoft Graph API by Nilesh Shah SharePoint Saturday Toronto 2017
Power of Microsoft Graph API by Nilesh Shah SharePoint Saturday Toronto 2017Power of Microsoft Graph API by Nilesh Shah SharePoint Saturday Toronto 2017
Power of Microsoft Graph API by Nilesh Shah SharePoint Saturday Toronto 2017
 
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...
ECS19 - Bill Ayers - UNLOCK YOUR BUSINESS KNOWLEDGE WITH THE MICROSOFT GRAPH,...
 
Overview Of Kaizala Extensibility and Programmability
Overview Of Kaizala Extensibility and ProgrammabilityOverview Of Kaizala Extensibility and Programmability
Overview Of Kaizala Extensibility and Programmability
 
O365Con18 - Reach for the Cloud Build Solutions with the Power of Microsoft G...
O365Con18 - Reach for the Cloud Build Solutions with the Power of Microsoft G...O365Con18 - Reach for the Cloud Build Solutions with the Power of Microsoft G...
O365Con18 - Reach for the Cloud Build Solutions with the Power of Microsoft G...
 
Microsoft Graph and Azure Functions - SharePoint User Group Frankfurt
Microsoft Graph and Azure Functions - SharePoint User Group FrankfurtMicrosoft Graph and Azure Functions - SharePoint User Group Frankfurt
Microsoft Graph and Azure Functions - SharePoint User Group Frankfurt
 
Granite state #spug The #microsoftGraph and #SPFx on steroids with #AzureFunc...
Granite state #spug The #microsoftGraph and #SPFx on steroids with #AzureFunc...Granite state #spug The #microsoftGraph and #SPFx on steroids with #AzureFunc...
Granite state #spug The #microsoftGraph and #SPFx on steroids with #AzureFunc...
 
How to use Microsoft Graph in your applications
How to use Microsoft Graph in your applicationsHow to use Microsoft Graph in your applications
How to use Microsoft Graph in your applications
 
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...
 
Microsoft Graph community call-October 2018
Microsoft Graph community call-October 2018Microsoft Graph community call-October 2018
Microsoft Graph community call-October 2018
 
Microsoft Azure For Solutions Architects
Microsoft Azure For Solutions ArchitectsMicrosoft Azure For Solutions Architects
Microsoft Azure For Solutions Architects
 
#SPSottawa The SharePoint Framework and The Microsoft Graph on steroids with ...
#SPSottawa The SharePoint Framework and The Microsoft Graph on steroids with ...#SPSottawa The SharePoint Framework and The Microsoft Graph on steroids with ...
#SPSottawa The SharePoint Framework and The Microsoft Graph on steroids with ...
 
#SPSToronto The SharePoint Framework and the Microsoft Graph on steroids with...
#SPSToronto The SharePoint Framework and the Microsoft Graph on steroids with...#SPSToronto The SharePoint Framework and the Microsoft Graph on steroids with...
#SPSToronto The SharePoint Framework and the Microsoft Graph on steroids with...
 

More from Microsoft 365 Developer

Change Notifications in Azure Event Hubs-April 2021
Change Notifications in Azure Event Hubs-April 2021Change Notifications in Azure Event Hubs-April 2021
Change Notifications in Azure Event Hubs-April 2021Microsoft 365 Developer
 
Microsoft Teams community call-August 2020
Microsoft Teams community call-August 2020Microsoft Teams community call-August 2020
Microsoft Teams community call-August 2020Microsoft 365 Developer
 
Decentralized Identities-July 2020 community call
Decentralized Identities-July 2020 community callDecentralized Identities-July 2020 community call
Decentralized Identities-July 2020 community callMicrosoft 365 Developer
 
Implement Authorization in your Apps with Microsoft identity platform-June 2020
Implement Authorization in your Apps with Microsoft identity platform-June 2020Implement Authorization in your Apps with Microsoft identity platform-June 2020
Implement Authorization in your Apps with Microsoft identity platform-June 2020Microsoft 365 Developer
 
Microsoft identity platform community call-May 2020
Microsoft identity platform community call-May 2020Microsoft identity platform community call-May 2020
Microsoft identity platform community call-May 2020Microsoft 365 Developer
 
Health team collaboration pitch deck partner
Health team collaboration pitch deck partnerHealth team collaboration pitch deck partner
Health team collaboration pitch deck partnerMicrosoft 365 Developer
 
Teams healthcare partner webinar ansuman partner
Teams healthcare partner webinar   ansuman partnerTeams healthcare partner webinar   ansuman partner
Teams healthcare partner webinar ansuman partnerMicrosoft 365 Developer
 
Teams healthcare partner webinar virtual visits partner
Teams healthcare partner webinar   virtual visits partnerTeams healthcare partner webinar   virtual visits partner
Teams healthcare partner webinar virtual visits partnerMicrosoft 365 Developer
 
Teams healthcare partner webinar srini partner
Teams healthcare partner webinar   srini partnerTeams healthcare partner webinar   srini partner
Teams healthcare partner webinar srini partnerMicrosoft 365 Developer
 
Teams healthcare partner webinar paul partner
Teams healthcare partner webinar   paul  partnerTeams healthcare partner webinar   paul  partner
Teams healthcare partner webinar paul partnerMicrosoft 365 Developer
 
Teams healthcare partner webinar keren partner
Teams healthcare partner webinar   keren partnerTeams healthcare partner webinar   keren partner
Teams healthcare partner webinar keren partnerMicrosoft 365 Developer
 
Teams healthcare partner webinar daniel partner
Teams healthcare partner webinar   daniel partnerTeams healthcare partner webinar   daniel partner
Teams healthcare partner webinar daniel partnerMicrosoft 365 Developer
 
Teams healthcare partner webinar andrew partner
Teams healthcare partner webinar   andrew partnerTeams healthcare partner webinar   andrew partner
Teams healthcare partner webinar andrew partnerMicrosoft 365 Developer
 
Security and compliance for healthcare pitch deck partner
Security and compliance for healthcare pitch deck partnerSecurity and compliance for healthcare pitch deck partner
Security and compliance for healthcare pitch deck partnerMicrosoft 365 Developer
 
Community call: Develop multi tenant apps with the Microsoft identity platform
Community call: Develop multi tenant apps with the Microsoft identity platformCommunity call: Develop multi tenant apps with the Microsoft identity platform
Community call: Develop multi tenant apps with the Microsoft identity platformMicrosoft 365 Developer
 

More from Microsoft 365 Developer (20)

Change Notifications in Azure Event Hubs-April 2021
Change Notifications in Azure Event Hubs-April 2021Change Notifications in Azure Event Hubs-April 2021
Change Notifications in Azure Event Hubs-April 2021
 
Power Apps community call - August 2020
Power Apps community call - August 2020Power Apps community call - August 2020
Power Apps community call - August 2020
 
Microsoft Teams community call-August 2020
Microsoft Teams community call-August 2020Microsoft Teams community call-August 2020
Microsoft Teams community call-August 2020
 
Decentralized Identities-July 2020 community call
Decentralized Identities-July 2020 community callDecentralized Identities-July 2020 community call
Decentralized Identities-July 2020 community call
 
Implement Authorization in your Apps with Microsoft identity platform-June 2020
Implement Authorization in your Apps with Microsoft identity platform-June 2020Implement Authorization in your Apps with Microsoft identity platform-June 2020
Implement Authorization in your Apps with Microsoft identity platform-June 2020
 
Power Apps community call-June 2020
Power Apps community call-June 2020Power Apps community call-June 2020
Power Apps community call-June 2020
 
Office Add-ins community call-June 2020
Office Add-ins community call-June 2020Office Add-ins community call-June 2020
Office Add-ins community call-June 2020
 
Microsoft identity platform community call-May 2020
Microsoft identity platform community call-May 2020Microsoft identity platform community call-May 2020
Microsoft identity platform community call-May 2020
 
Power Apps community call - May 2020
Power Apps community call - May 2020Power Apps community call - May 2020
Power Apps community call - May 2020
 
Health team collaboration pitch deck partner
Health team collaboration pitch deck partnerHealth team collaboration pitch deck partner
Health team collaboration pitch deck partner
 
Teams healthcare partner webinar ansuman partner
Teams healthcare partner webinar   ansuman partnerTeams healthcare partner webinar   ansuman partner
Teams healthcare partner webinar ansuman partner
 
Teams healthcare partner webinar virtual visits partner
Teams healthcare partner webinar   virtual visits partnerTeams healthcare partner webinar   virtual visits partner
Teams healthcare partner webinar virtual visits partner
 
Teams healthcare partner webinar srini partner
Teams healthcare partner webinar   srini partnerTeams healthcare partner webinar   srini partner
Teams healthcare partner webinar srini partner
 
Teams healthcare partner webinar paul partner
Teams healthcare partner webinar   paul  partnerTeams healthcare partner webinar   paul  partner
Teams healthcare partner webinar paul partner
 
Teams healthcare partner webinar keren partner
Teams healthcare partner webinar   keren partnerTeams healthcare partner webinar   keren partner
Teams healthcare partner webinar keren partner
 
Teams healthcare partner webinar daniel partner
Teams healthcare partner webinar   daniel partnerTeams healthcare partner webinar   daniel partner
Teams healthcare partner webinar daniel partner
 
Teams healthcare partner webinar andrew partner
Teams healthcare partner webinar   andrew partnerTeams healthcare partner webinar   andrew partner
Teams healthcare partner webinar andrew partner
 
Security and compliance for healthcare pitch deck partner
Security and compliance for healthcare pitch deck partnerSecurity and compliance for healthcare pitch deck partner
Security and compliance for healthcare pitch deck partner
 
Power Apps community call_April 2020
Power Apps community call_April 2020Power Apps community call_April 2020
Power Apps community call_April 2020
 
Community call: Develop multi tenant apps with the Microsoft identity platform
Community call: Develop multi tenant apps with the Microsoft identity platformCommunity call: Develop multi tenant apps with the Microsoft identity platform
Community call: Develop multi tenant apps with the Microsoft identity platform
 

Recently uploaded

Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 

Recently uploaded (20)

Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 

An introduction to Microsoft Graph for developers

  • 1. An introduction to Microsoft Graph for developers PartII – AdvancedTopics Identity Developer Advisors November 21st, 2019 Kalyan Krishna Sr Program Manager-Identity Division kalyankrishna1
  • 3.  What is Microsoft Graph?  Why did we build Microsoft Graph?  Common Scenarios  Developing applications for Microsoft Graph  The app topology  Permissions & Consent  SDKs  The app patterns  Code walkthrough – Manage Users  The Big Picture PAGE 3
  • 4. Microsoft Graph: gateway to your data in the Microsoft cloud
  • 5. Single API for: 1.Accessing data /me, /users, /groups, /messages, /drive, …. 2.Traversing data /drive/items/<id>/lastmodifiedByUser 3.Accessing insights /insights/trending 4.Work/School and Personal Accounts What is Microsoft Graph? https://graph.microsoft.com/
  • 6.
  • 7. Try it now.. Microsoft Graph Explorer – https://aka.ms/ge
  • 8. Microsoft Graph https://graph.microsoft.com/ Insights and relationships Calendar Personal Contacts Files Notes Org Contacts NotesPeopleUsers ExcelTasksMailGroups Data XCode Eclipse or Android Studio Visual Studio REST Development Environment YOUR APP Your choice of technology (.NET, JS, HTML, Ruby, etc.) Microsoft Azure Other hosting (IIS, LAMP, etc.) Solution Authentication and Authorization OpenID Connect and OAuth 2.0
  • 9. Users can consent for their data or admin can consent for all users Only admin can consent Delegated permissions App Permissions App permissions Permission type: applicationPermission type: delegated Get access on behalf of users Get access as a service Effective permissionEffective permission https://aka.ms/ConsentAndPermissions
  • 12.
  • 13. Microsoft Graph SDKs, samples and tooling
  • 14. • Provides support for common tasks such as • Models and request builders for entities • Paging through collections. • Creating batch requests. • More.. • Embedded support for • Retry handling • Secure redirects • Payload compression • More.. Improve your application's interactions with Microsoft Graph, without adding complexity • Designed to simplify building high- quality, efficient, and resilient applications that access Microsoft Graph • Available to be included in your projects via GitHub and popular platform package managers • The library contains models and request builders that are generated from Microsoft Graph metadata
  • 15. Microsoft Graph SDKs • For .NET, separate SDKs available for: • /V1.0 - https://graph.microsoft.com/v1.0/$metadata • /beta - https://graph.microsoft.com/beta/$metadata
  • 16. Microsoft Graph .NET Authentication Provider Library  Microsoft Graph .NET authentication library provides a set of OAuth scenario-centric authentication providers that implement Microsoft.Graph.IAuthenticationProvider  Uses Microsoft Authentication Library (MSAL) under the hood to handle access token acquisition and storage.  Its still in prerelease, so , use the –prerelease flag in Nuget fetch Install-Package Microsoft.Graph.Auth -PreRelease
  • 17.
  • 18.
  • 19. Aboutthissession Objectives • Harness the power of Graph beyond the REST Api. • Build more resilient, performant and fault-tolerant applications. Topics • Using the Graph SDK • Pagination • Optimizations • Change Tracking • Delta Queries • Notifications • Batching • Throttling & Error Handling • Extending Graph
  • 20. Prerequisitesforcoding: Get a free Azure AD tenant for development purposes https://aka.ms/o365devprogram The Code from previous session: https://gist.github.com/kalyankrishna1/0a6ea6d00a09f7ae81c89960e1038d79 For Change notifications, we’d use the following sample, please download: https://github.com/microsoftgraph/msgraph-training-changenotifications We’d use ngrok to demo notifications. Register and download the free tool from : https://ngrok.com/ The updated code for this session: https://gist.github.com/kalyankrishna1/997f7ca1af1f73f8107c1c8cebfbaf3f
  • 21. To build an app.. • Use Graph explorer and the Docs to: • Locate all the Apis you’d need to call • Locate all the permissions your app will be requesting • Register your app with the identity platform • Configure app permissions • Use MSAL for sign-in and get a token for Graph • Make calls using Graph SDK (preferred) or REST APIs directly
  • 22.
  • 23. profile GET: /users/kkrishna { "displayName": "Kalyan Krishna", "givenName": "Kalyan", "jobTitle": "SENIOR PROGRAM MANAGER", } GET: /users/kkrishna/photo/$value GET: /users/kkrishna/manager {"displayName": “Beatriz…} GET: /users/kkrishna/directReports "value" : [ {"displayName": “Tiago…}, {"displayName": “Mani…} ] GET: /me/memberOf/… "value" : [ {"displayName": “Microsoft Graph…}, {"displayName": “Azure AD Identity Champs…}] Beatriz manager Tiago Mani directReports Groups memberOf
  • 24. With the SDK // Initialize and prepare MSAL [Redacted] // Initialize the Graph SDK authentication provider InteractiveAuthenticationProvider authenticationProvider = new InteractiveAuthenticationProvider(app, scopes); GraphServiceClient graphServiceClient = new GraphServiceClient(authenticationProvider); // Call the /me Api var me = graphServiceClient.Me.Request().GetAsync().Result; Console.WriteLine($"Display Name from /me-{me.DisplayName}");
  • 25.
  • 26. Pagination Graph uses server-side page size limits When querying collections, Graph may return the results in many pages Always expect an @odata.nextLink property in the response Contains the URL to the next page
  • 27. Request 1. Always handle the possibility that the responses are paged in nature 2. Follow the @odata.nextLink to obtain the next page of results 3. Final page will not contain an @odata.nextLink property 4. Treat the entire URL as an opaque string
  • 28. Easier with SDK // call /me/memberOf Api var mygroups = await graphServiceClient.Me.MemberOf.Request().GetAsync(); int pagenum = 1; if (mygroups != null){ do { // Page through results foreach (var directoryObject in mygroups.CurrentPage) { if (directoryObject is Group) { Group group = directoryObject as Group; Console.WriteLine($"Page #-{pagenum}- Group:{group.DisplayName}"); } } // are there more pages (Has a @odata.nextLink ?) if (mygroups.NextPageRequest != null) { mygroups = await mygroups.NextPageRequest.GetAsync(); pagenum++; } else { mygroups = null; } } while (mygroups != null); }
  • 29.
  • 30. Querying data | Use projections GET https://graph.microsoft.com/v1.0/users? $select=givenName,mail Choose the properties your app really needs and no more Don’t send unnecessary data over the wire Tip Use $select
  • 31. Querying data | Use filters GET https://graph.microsoft.com/v1.0/users? $filter=department eq ‘Sales’ & $select=givenName,mail Choose the records your app really needs and no more Don’t send unnecessary data over the wire Tip Use $filter
  • 32. POST/PATCH/PUT | no response required If your code doesn’t need to get a response, then opt out Don’t send unnecessary data over the wire Tip Use HTTP Prefer return=minimal request header
  • 33.
  • 34.
  • 35. Track changes | Delta query Scenario Need to cache or store Microsoft Graph data locally, and keep that data up to date, or track changes to data for any other reasons Tip Use delta query Why Stop retrieving data your application already has! Minimizes network traffic Reduces the likelihood of reaching a throttling threshold https://docs.microsoft.com/en-us/graph/delta-query-overview
  • 36. Allows retrieving changes since you last requested them Check the Delta query overview page for supported resources Use the /delta function to request changes Store returned the deltaLink for subsequent requests Use $select to narrow what you want changes for Track changes | Delta query
  • 37.
  • 38.
  • 39. Track changes | Webhooks Scenario Client apps use notifications to update their state upon changes Tip Use webhook notifications as the trigger to make delta query calls Why Difficult to figure out optimal polling interval
  • 40. • Translate an email when it arrives • Start a Flow when a document is X many months old • Create new user accounts in your application when a user joins an organization Track changes | Webhooks Example Scenarios
  • 41. Microsoft Graph webhook subscriptions – high level overview Groups FilesCalendar Messages Meetings User People Devices Coworkers Insights Chats Teams Tasks Microsoft Graph Subscription request1 Subscription response – HTTP 201 Created2 Notifications3
  • 42. Supported resources • Outlook message • Outlook event • Outlook personal contact • user • group • Office 365 group conversation • Content within the hierarchy of any folder driveItem on a user's personal OneDrive • Content within the hierarchy of the root folder driveItem on OneDrive for Business • Security alert Check the webhooks docs for the latest list of supported resources.
  • 43. Token validation and notification responses Application https://graph.microsoft.com/v1.0https://contoso.com/api HTTP POST /subscriptions + subscription in body HTTP POST ?validationToken=XYZ HTTP 200 OK + token in body HTTP 201 CREATED + subscription in body HTTP POST + notifications in body HTTP 202 ACCEPTED HTTP GET resource HTTP 200 OK + resource
  • 44. WebHooks create request example GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions POST https://graph.microsoft.com/v1.0/subscriptions Content-Type: application/json { "resource": "/users", "changeType": "updated", "clientState": "SecretClientState", "notificationUrl": "https://dfa2c56c.ngrok.io/api/notifications", "expirationDateTime": "2019-22-23T15:41:22.3774877+00:00" }
  • 45. GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions POST https://68c75850.ngrok.io/api/notifications { "value": [ { "changeType": "updated", "clientState": "SecretClientState", "resource": "Users/695a3e1d-2e9f-4d24-aa3c-ac795c16f25c", "resourceData": { "@odata.type": "#Microsoft.Graph.User", "@odata.id": "Users/695a3e1d-2e9f-4d24-aa3c-ac795c16f25c", "id": "695a3e1d-2e9f-4d24-aa3c-ac795c16f25c", "organizationId": "979f4440-75dc-4664-b2e1-2cafa0ac67d1", "sequenceNumber": 637048551305855700 }, "subscriptionExpirationDateTime": "2019-09-23T17:09:24.8176341+00:00", "subscriptionId": "9697c441-8375-4651-9c5a-bb85b9da005a", "tenantId": "979f4440-75dc-4664-b2e1-2cafa0ac67d1" } ] } WebHooks notification
  • 47.
  • 49. • You should expect throttling and handle it with retries. • Microsoft Graph returns status code 429 and a retry-after value. • Limits on read operations are much higher than on write. • When using /$batch, errors are returned for individual requests Throttling HTTP/1.1 200 OK <- the batch request was successful, however some requests may have failed {"responses": [ { "id": “myRequest1", "status":429, <-this request was throttled and should be retried "headers" : {"Retry-After":"9"}, “body”: { "error": { "code": "TooManyRequests", } } }, { "id": “myRequest2", "status":204, <-this request succeeded “body": { … } } ]}
  • 50. Easier with SDK var messages = await graphServiceClient.Me.Messages.Request() .WithMaxRetry(5) .WithScopes(new string[] { "Mail.Read" }) .GetAsync(); Throttling
  • 51. Error Best practice 403 How did this happen? My application got consent! The signed-in user does not have privileges to access the resource requested. Tip: Provide a generic "Access denied" error back to the signed-in user. 404 How did this happen? I just got this resource! Resource not yet provisioned (like a user's photo) Resource has been deleted Tip: Watch for restore - your application should also take this into account. 429 Your app should always be prepared to be throttled. Tip: Honor the HTTP Retry-After response header to recover Tip: Rate limit to stay below throttle limits 503 Service is busy Tip: Retry – but employ a back-off strategy similar to 429 Tip: Additionally, always make new retry requests over a new HTTP connection Handle expected errors
  • 53. Batching Scenario Mobile client app needs to get signed-in user’s profile AND avatar Tip Use JSON batching Why Performance gains through multiplexing Save the application significant network latency Conserves connection resources Lower bandwidth consumption https://aka.ms/gb
  • 54.
  • 56. Extending Microsoft Graph Add app specific user profile data Your app Data Your app
  • 57. Open extensions - a flexible way to add untyped app data directly to a resource instance. extensionName is the only pre-defined, writeable property, must be unique within the tenant Schema extensions - Define schema extension definition and extend resource instances with strongly-typed custom data. The schema discoverable and shareable, can be used in filtering. https://docs.microsoft.com/en-us/graph/extensibility-overview Adding custom data to resources in Microsoft-Graph
  • 59. Open Extensions • Open extensions, are accessible through the extensions navigation property of the resource instance • The extensionName property is the only pre-defined, writable property in an open extension • When creating an open extension, you must assign the extensionName property a name that is unique within the tenant.
  • 60. GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions Create Request POST https://graph.microsoft.com/v1.0/me/extensions Content-type: application/json { "@odata.type":"microsoft.graph.openTypeExtension", "extensionName":"com.contoso.roamingSettings", "theme":"dark", "color":"purple", "lang":"Japanese" } Open extensions example
  • 61. GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions Creation Response HTTP/1.1 201 Created Content-type: application/json { "@odata.type": "#microsoft.graph.openTypeExtension", "extensionName": "com.contoso.roamingSettings", "id": "com.contoso.roamingSettings", "theme": "dark", "color": "purple", "lang": "Japanese" } Open extensions example
  • 62. GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions Update the data in the open extension Request PATCH https://graph.microsoft.com/v1.0/me/extensions/com.contoso.roamingSettings Content-type: application/json { "theme": "light", "color": "yellow", "lang": "Swahili" } Response HTTP/1.1 204 No content Open extensions example
  • 63. GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions Retrieve roaming profile information Request GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail,mobilePhone&$expand=extensions Response HTTP/1.1 200 OK Content-Type: application/json Content-length: 420 { "id": "84b80893-8749-40a3-97b7-68513b600544", "displayName": "John Smith", "mail": "john@contoso.com", "mobilePhone": "1-555-6589", "extensions": [ { "@odata.type": "#microsoft.graph.openTypeExtension", "extensionName": "com.contoso.roamingSettings", "id": "com.contoso.roamingSettings", "theme": "dark", "color": "purple", "lang": "Japanese" } ] } Open extensions example
  • 65. Schema Extensions Versatility Define schema extension definition and extend resource instances with strongly-typed custom data. Discoverable by other apps via status property Schema extensions are complex types, enabling use of HTTP verbs: • POST to specify custom data when creating a new resource instance • GET to read the custom data • PATCH to add or update in an existing resource instance • PATCH to set the complex type to null, deleting the custom data
  • 66. GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions View existing schema extensions POST GET https://graph.microsoft.com/v1.0/schemaExtensions?$filter=id eq 'graphlearn_test’ Content-type: application/json { "value": [ { "id": "graphlearn_test", "description": "Yet another test schema", "targetTypes": [ "User", "Group" ], "status": "Available", "owner": "24d3b144-21ae-4080-943f-7067b395b913", "properties": [ { "name": "testName", "type": "String" } ] } ] } Schema extensions example
  • 67. GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions Register a new schema extension - Request POST https://graph.microsoft.com/v1.0/schemaExtensions Content-type: application/json { "id": "graphlearn_courses", "description": "Graph Learn training courses extensions", "targetTypes": [ "Group" ], "properties": [ { "name": "courseId", "type": "Integer" }, { "name": "courseName", "type": "String" }, { "name": "courseType", "type": "String" } ] } Schema extensions example
  • 68. GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions Register a new schema extension – Response HTTP/1.1 201 Created Content-length: 420 Content-type: application/json { "id": "graphlearn_courses", "description": "Graph Learn training courses extensions", "targetTypes": [ "Group" ], "status": "InDevelopment", "owner": "24d3b144-21ae-4080-943f-7067b395b913", "properties": [ { "name": "courseId", "type": "Integer" }, { "name": "courseName", "type": "String" }, { "name": "courseType", "type": "String" } ] } Schema extensions example
  • 69. GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions Populate a schema extension (a group) Request POST https://graph.microsoft.com/v1.0/groups Content-Type: application/json { "displayName": "New Managers March 2017", "description": "New Managers training course for March 2017", "groupTypes": [ "Unified" ], "mailEnabled": true, "mailNickname": "newMan201703", "securityEnabled": false, "graphlearn_courses": { "courseId": "123", "courseName": "New Managers", "courseType": "Online" } } Schema extensions example
  • 70. GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions Populate a schema extension (a group) Response POST https://graph.microsoft.com/v1.0/groups HTTP/1.1 201 Created Content-length: 420 Content-Type: application/json { "id": "dfc8016f-db97-4c47-a582-49cb8f849355", "createdDateTime": "2017-02-09T00:17:05Z", "description": "New Managers training course for March 2017", "displayName": "New Managers March 2017", "groupTypes": [ "Unified" ], "mail": "newMan201703@graphlearn.com", "mailEnabled": true, "mailNickname": "newMan201703", "securityEnabled": false, "theme": null, "visibility": "Public" } Schema extensions example
  • 71. GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail&$expand=extensions Add update and remove data in a schema extension (a group) Request PATCH https://graph.microsoft.com/v1.0/groups/dfc8016f-db97-4c47-a582-49cb8f849355 Content-length: 230 Content-Type: application/json { "graphlearn_courses": { "courseId": "123", "courseName": "New Managers", "courseType": "Online" } } Response HTTP/1.1 204 No Content Schema extensions example
  • 72.
  • 73. Microsoft NDA Confidential Identity and Security Collaborative Engineering Next Steps • Visit our docs @ https://aka.ms/graph • Connect with us via: • Ask questions to the team: https://stackoverflow.com/questions/tagged/microsoft-graph • Submit new feature and service requests @ https://feedback.azure.com
  • 74. Microsoft Confidential Engage with us! Topic Feedback type Forum URL Who supports All identity developer topics (Auth libraries, MS Graph, App Registration portals) Community-driven developer Support for Questions and Answers Stack Overflow https://stackoverflow.com/questions/tagged/azu re-active-directory+or+microsoft- graph+or+azure-ad-conditional-access Supported by Microsoft and community Authentication Libraries – ADAL, MSAL, Auth Middleware Library issues, bugs, open source contributions GitHub https://docs.microsoft.com/azure/active- directory/develop/active-directory- authentication-libraries Azure AD teams manage issues, bugs and review/ approve contribution Azure AD, MS Graph, Libraries, App Registration – Developer Experiences Feature requests, suggestions for product improvements Azure Feedback Azure Feedback for Authentication and also AppRegFeedback@microsoft.com for portal specific feedback. User Voice for Microsoft Graph Azure AD teams triage feature requests All identity developer topics (Auth libraries, MS Graph, App Registration portals) Discussion with other MVPs and NDA community Yammer Identity Developer Advisors https://www.yammer.com/azureadvisors/#/threa ds/inGroup?type=in_group&feedId=5800064 Engagement with Identity Advisors and Microsoft product groups Identity developer topics for Auth Delve deep into complex identity related development topics live Community Office Hours azuread Twitter handle and the Microsoft Tech community Opportunity to make questions and answers in real time to product teams via live conference All developer topics Assisted support for developers Customer Service and Support More information on support options: https://aka.ms/devexhelpsupport Direct 1:1 help from our support engineering teams
  • 75. References and Samples • Install the Microsoft Graph SDKs • Authentication Providers for Microsoft Graph .NET SDK • Graph SDK design • Microsoft Graph Uservoice • Best practices for working with Microsoft Graph • Use query parameters to customize responses • Combine multiple requests in one HTTP call using JSON batching • BatchRequestContent • Add custom data to resources using extensions • Configuring directory extension optional claims • Microsoft Graph resources • Microsoft Graph SDK beta • Office 365 Developer Program • Paging Microsoft Graph data in your app
  • 76. Join the Developer Program Benefits Free renewable Office 365 E3 subscription Be your own admin Dev sandbox creation tools Preload sample users and data for Microsoft Graph, and more Access to Microsoft 365 experts Join bootcamps and monthly community calls Tools, training and documentation Learn, discover and explore about Office 365 development Blogs, newsletters and social Stay up to date with the community https://aka.ms/o365devprogram
  • 77. Microsoft Graph Gateway to your data in the Microsoft cloud Users, Groups, Organizations Outlook SharePoint OneDrive Teams Planner Excel OneNote Activities Device Relay Commands Notifications Azure AD Intune Identity Manager Advanced Threat Analytics Advanced Threat Protection Mail, Calendar, Contacts and Tasks Sites and Lists Drives and Files Channels, Messages Tasks and Plans Spreadsheets Notes, and more… Identity Management Access Control Synchronization Domains Administrative Units Applications and Devices Advanced Threat Analytics Advanced Threat Protection Alerts Policies and more… Office 365 Windows 10 Enterprise Mobility + Security https://graph.microsoft.com Dynamics 365 Business Central

Editor's Notes

  1. https://www.youtube.com/watch?v=EBbnpFdB92A
  2. With Microsoft Graph, apps and services can leverage this incredibly rich data set from M365 thanks to the Microsoft Graph service, which directs the calls to the right source so developer don’t need to know where exactly the data lives. Graph also aggregates calls for efficiency and performance, and allows the developer to easily traverse the graph of data. This way, it’s easy to build an app that – for example – based on a security alert in a tenant, can traverse the graph to see which users might be affected, and for each user, which devices and documents might be affected – thus making it easy to connect data from across many services to solve for real business scenarios. And some of these scenarios include : building apps for identity-centric scenarios - where users, and other AAD-centric and directory data is at the center – for example, like pulling in who is someone's manager or what organization they are in. Devs can build apps with richer content – Access deep insights generated from usage patterns, such as trending documents, best team meeting times, or who people typically work with. Devs can also build apps with deep insights based on machine learning algorithms that power some of the Graph APIs. And finally devs can build apps with real time updates of the data – for businesses that run in real time. Developers can respond to changes in Microsoft Graph data in real time. For example, reschedule a meeting based on responses, notify others when a file is modified, or continue a process after it's been approved. We’re super excited to make Microsoft Graph the gateway to data and intelligence in Microsoft 365 and give developers a unified programmability model to take advantage of the tremendous amount of data in Office 365, Enterprise Mobility + Security, and Windows 10. And we’ve also recently added Dynamics 365 Business Central data in Microsoft Graph.
  3. Demos with graph explorer: Prep: Navigate to https://graph.microsoft.io/graphd-explorer Sign in and consent if prompted In the txt box type the requests bellow to showcase the API Click GO or press enter to execute the request and see the API call results. Demo Intro: This is a web application built for showcasing requests and responses of Microsoft Graph hosted under graph.microsoft.com. I’m logged in to this application using my credentials and I will show you how using this single endpoint I can access data across services in Office 365 and Azure. Requests: /ME Talking point: graph.microsoft.com is an API that aggregates information across services. Starting with the user, I can make request to get my profile using the shortcut /me. This requests goes and gets my basic profile information from Azure AD, my picture from Exchange and my extended profile from SharePoint, like my interests and skills https://graph.microsoft.com/v1.0/me https://graph.microsoft.com/v1.0/me/userPhoto https://graph.microsoft.com/v1.0/me?$select=skills /USERS Talking point: in a similar fashion I can get the same information for other users in my organization, including organizational structure https://graph.microsoft.com/v1.0/me/manager https://graph.microsoft.com/v1.0/me/directReports https://graph.microsoft.com/v1.0/me/memberOf https://graph.microsoft.com/v1.0/users https://graph.microsoft.com/v1.0/users?$filter=Department eq ‘Extensibility’ https://graph.microsoft.com/v1.0/users/kkrishna@microsoft.com https://graph.microsoft.com/v1.0/users/kkrishna@microsoft.com/manager /MESSAGES and /EVENTS Talking point: using the same endpoint I can get access to my messages and calendar from Exchange https://graph.microsoft.com/v1.0/me/messages?$top=5 https://graph.microsoft.com/v1.0/me/messages?$skip=5&$orderBy=DateTimeCreated https://graph.microsoft.com/v1.0/me/messages?$search=”from:dan” --- Use CTRL+F to use browser search to find Dan https://graph.microsoft.com/v1.0/me/events https://graph.microsoft.com/v1.0/me/events?$top5 /FILES Talking point: and files from OneDrive for Business. Furthermore, I can navigate to a particular file and see the profile of the last person who modified it https://graph.microsoft.com/v1.0/me/drive/root/children https://graph.microsoft.com/v1.0/me/drive/root/children/file.txt https://graph.microsoft.com/v1.0/me/drive/items/<id> https://graph.microsoft.com/v1.0/me/drive/items/<id>/lastModifiedByUser https://graph.microsoft.com/v1.0/kkrishna@microsoft.com/drive/root https://graph.microsoft.com/v1.0/kkrishna@microsoft.com/drive/items/<id>/lastModifiedByUser/manager /GROUPS Talking point: Microsoft Graph is also the API front for Office 365 Groups, where users can collaborate and have conversations, shared calendar and shared files. Using graph.microsoft.com is the way to go to access all of the group’s information, for both management and content. Information groups is coming from multiple services, including AAD, SharePoint and Exchange and growing to OneNote and others. https://graph.microsoft.com/v1.0/groups https://graph.microsoft.com/v1.0/groups?$filter=groupType eq ‘Unified’ https://graph.microsoft.com/v1.0/groups/<id> – Select a unified group on ID https://graph.microsoft.com/v1.0/groups /<id>/members https://graph.microsoft.com/v1.0/groups/<id>/drive/root/children https://graph.microsoft.com/v1.0/groups/<id>/conversations https://graph.microsoft.com/v1.0/groups/<id>/events /TRENDINGAROUND and /PEOPLE Talking point: Now, I think you have all heard about our intelligent services and the insight and relationships that we calculate based on user activity in the service. Microsoft Graph exposes those APIs as well. Here is where we take all of the data across Office 365 services and the signals collected based on user’s activity, and combine them and process them through a whole bunch of machine learning, relevance and ranking algorithms that return inferred and calculated insights and relationships between entities. These relationships between people, content and interactions that occur across Office 365. https://graph.microsoft.com/beta/me/people https://graph.microsoft.com/beta/me/trendingAround /WORKBOOK – EXCEL API Talking point: Do you need to calculate, analyze, automate, report on or manage data in your app? Well, look no further at building these capabilities yourself – using the new Excel REST API, you have the power and simplicity of Excel at your fingertips (or a few simple HTTP calls) for all of your app’s calculation needs. https://graph.microsoft.com/v1.0/me/drive/root:/bool.xlsx:/workbook/worksheets('Sheet1') PATCH https://graph.microsoft.com/v1.0/me/drive/root:/bool.xlsx:/workbook/worksheets('Sheet1')/range(address='A1:A6')/format/fill { color: "#FF0000" }      
  4. Microsoft Tech Summit FY17
  5. Get a free Azure AD tenant for development purposes https://aka.ms/o365devprogram The Code from previous session: https://gist.github.com/kalyankrishna1/0a6ea6d00a09f7ae81c89960e1038d79 For Change notifications, we’d use the following sample, please download: https://github.com/microsoftgraph/msgraph-training-changenotifications We’d use ngrok to demo notifications. Register and download the free tool from : https://ngrok.com/ The updated code for this session: https://gist.github.com/kalyankrishna1/997f7ca1af1f73f8107c1c8cebfbaf3f
  6. Application model How this works – what’s an application, service principal, permissions, consent
  7. Embedded collections can be paginated too. Different APIs might have different default and maximum page sizes. Different APIs might behave differently if you specify a page size (via the $top query parameter) that exceeds the maximum page size for that API. Depending on the API, the requested page size might be ignored, it might default to the maximum page size for that API, or Microsoft Graph might return an error. Not all resources or relationships support paging. For example, queries against directoryRoles do not support paging. This includes reading role objects themselves as well as role members.
  8. For some operations, such as PUT and PATCH (and in some cases POST), if your application doesn't need to make use of a response payload, you can ask the API to return minimal data. Note that some services already return a 204 No Content response for PUT and PATCH operations. Note: Request minimal representation responses using an HTTP request header where appropriate: Prefer: return=minimal. Note that for creation operations, this might not be appropriate because your application may expect to get the service generated id for the newly created object in the response.
  9. https://graph.microsoft.com/v1.0/groups/delta?$select=displayName,description&$expand=members The delta function. A state token (deltaToken or skipToken) from the previous GET delta function call. The application begins by calling a GET request with the delta function on the desired resource. Microsoft Graph sends a response containing the requested resource and a state token. a. If a nextLink URL is returned, there may be additional pages of data to be retrieved in the session. The application continues making requests using the nextLink URL to retrieve all pages of data until a deltaLink URL is returned in the response. b. If a deltaLink URL is returned, there is no more data about the existing state of the resource to be returned. For future requests, the application uses the deltaLink URL to learn about changes to the resource. When the application needs to learn about changes to the resource, it makes a new request using the deltaLink URL received in step 2. This request may be made immediately after completing step 2 or when the application checks for changes. Microsoft Graph returns a response describing changes to the resource since the previous request, and either a nextLink URL or a deltaLink URL.
  10. https://docs.microsoft.com/en-us/graph/api/subscription-post-subscriptions?view=graph-rest-1.0&tabs=http
  11. Webhooks are HTTP requests made from Microsoft Graph to a web endpoint that you configure when creating the subscription. The endpoint uses HTTPS protocol, the endpoint must be publicly accessible (you cannot register an endpoint that is non-routable or behind a firewall such as https://localhost). During testing you can use a proxy such as ngrok.
  12. https://docs.microsoft.com/en-us/graph/api/subscription-post-subscriptions?view=graph-rest-1.0&tabs=http
  13. Your application sends an HTTP POST to the Microsoft graph endpoint https://graph.microsoft.com/v1.0/subscriptions/ Microsoft sends an HTTP POST to the URL with a queryString ?validationToken. Your application has 10 seconds to reply with a 200 OK and the token in the response body. If your API replies within the 10 seconds, the response to the original request is finally sent back to the application Finally, your API will receive notifications for the given resource for the duration of the subscription, your application needs to update the subscription request prior to the timeout. When your application receives a notification, it can then make a request back to Microsoft Graph to request additional information about the changed resource. The initial subscription request includes a client state, which should be matched against the client state value sent from Microsoft. Your API has about 10 seconds to reply to a notification with an HTTP 202 before Microsoft will re-send the request.
  14. The changeType, notificationUrl, resource, and expirationDateTime properties are required. See subscription resource type for property definitions and values. The resource property specifies the resource that will be monitored for changes. For example, you can create a subscription to a specific mail folder: me/mailFolders('inbox')/messages or on behalf of a user given by an administrator consent: users/john.doe@onmicrosoft.com/mailFolders('inbox')/messages. Although clientState is not required, you must include it to comply with our recommended notification handling process. Setting this property will allow you to confirm that notifications you receive originate from the Microsoft Graph service. For this reason, the value of the property should remain secret and known only to your application and the Microsoft Graph service.
  15. The changeType, notificationUrl, resource, and expirationDateTime properties are required. See subscription resource type for property definitions and values. The resource property specifies the resource that will be monitored for changes. For example, you can create a subscription to a specific mail folder: me/mailFolders('inbox')/messages or on behalf of a user given by an administrator consent: users/john.doe@onmicrosoft.com/mailFolders('inbox')/messages. Although clientState is not required, you must include it to comply with our recommended notification handling process. Setting this property will allow you to confirm that notifications you receive originate from the Microsoft Graph service. For this reason, the value of the property should remain secret and known only to your application and the Microsoft Graph service.
  16. While your application should handle all error responses (in the 400 and 500 ranges), some special attention should be paid to certain expected errors and responses, which are highlighted below.
  17. JSON batching allows you to optimize your application by combining multiple requests into a single JSON object. For example, a client might want to compose a view of unrelated data such as: An image stored in OneDrive A list of Planner tasks The calendar for a group Batch requests are always sent using POST to the /$batch endpoint. Batch size is limited to 20
  18. Important: You should not use extensions to store sensitive personally identifiable information, such as account credentials, government identification numbers, cardholder data, financial account data, healthcare information, or sensitive background information.
  19. Open extensions (formerly known as Office 365 data extensions) are open types that offer a flexible way to add untyped app data directly to a resource instance.
  20. CRUD operations are supported
  21. CRUD operations are supported The same permissions that are required to read from or write to a specific resource are also required to read from or write to any extensions data on that resource. Additionally, to create and manage schema extension definitions, an application must be granted the Directory.AccessAsUser.All permission.
  22. One more way of looking at what Microsoft Graph has to offer is by looking at the resources is exposes These services and the suite of products behind them, have core entities that drive user productivity and the one of the first steps on my journey to serve you as a developer is to expose these core entities in a coherent and consistent form so that you can interact with them and use them in your tailored solutions.