我想制作一个返回事件持续时间的函数应用程序。这些事件存储在Outlook中的共享日历中。
我可以使用带有以下URL的图形资源管理器访问共享日历:
https://graph.microsoft.com/v1.0/users/calendarName@whereIwork.com.au/events?$select=subject,start
所以我知道系统的这一部分工作。函数应用将获取下一个事件,如果发生4天,则返回4
。
我不希望用户进行身份验证,我希望此信息对全世界都可见。
将auth烘焙到函数中的正确方法是什么?
*如果这种概念有意义的话
答案 0 :(得分:1)
您可以通过client_credentials流实现该目标。请按照以下步骤操作: 1.注册一个Azure AD应用程序并记下其应用程序ID。授予Microsoft Graph API的读取日历权限: 请记住,单击“您的租户的授予管理员同意”以完成许可授予过程。 完成此过程后,此应用将有权通过图形API读取您租户中所有用户的日历信息。
尝试下面的azure功能代码:
import logging
import requests
import json
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
tenantID = "<your tenant ID>"
account = "<account in your tenant you want to share event>"
appId= "<app ID you just registered >"
appSecret = "<app secret you just created>"
authUrl = 'https://login.microsoftonline.com/'+ tenantID +'/oauth2/token'
body = "grant_type=client_credentials&resource=https://graph.microsoft.com&client_id="+ appId +"&client_secret=" + appSecret
headers = {'content-type': 'application/x-www-form-urlencoded'}
r = requests.post(authUrl, data=body, headers=headers)
access_token = json.loads(r.content)["access_token"]
graphURL = "https://graph.microsoft.com/v1.0/users/"+account+"/events?$select=subject,start"
result =requests.get(graphURL,
headers={'Authorization': 'Bearer ' + access_token}
)
#get all event results here and you can finish your logic below:
eventResult = result.content
return func.HttpResponse(str(eventResult))