如何在Web应用程序中静默获取Azure AD令牌C#

时间:2018-03-23 07:49:17

标签: azure active-directory microsoft-graph

我需要在我的应用程序(C#)中获取Azure令牌以对用户执行Graph API操作,但是在调用应用程序时(app必须完全自动化,在计时器作业中工作)没有sign in所以我有一个问题如何使令牌获取过程完全自动化(没有用户)?

我发现的关于这个主题的所有内容: Get access without a user 但我没能重新创造它。

2 个答案:

答案 0 :(得分:1)

您描述的OAuth2流程称为"客户端凭据授权"并详细描述了here

简而言之,在这种情况下它是相关的,并且这样工作:

  

首先,守护程序应用程序无法进行用户交互,   这要求应用程序具有自己的身份。一个例子   守护程序应用程序是批处理作业或操作系统服务   在后台运行。此类应用程序请求访问   令牌使用其应用程序标识并显示其应用程序   ID,凭证(密码或证书)和应用程序ID URI   Azure AD。身份验证成功后,守护程序会收到一个   从Azure AD访问令牌,然后用于调用Web API。

Application Identity with OAuth 2.0 Client Credentials Grant

查看this实现,了解它是如何在代码中完成的。

答案 1 :(得分:1)

使用OAuth On-Behalf-Of完全符合您的描述。哪种On-Behalf-Of方法,没有用户交互来获得用户对访问下游API(例如Graph API)的同意。换句话说,用户身份&权限在完整的请求链中以静默方式委派。在实际的企业环境中,您的应用程序通常由另一个身份提供程序(例如Active Directory)而不是Azure AD进行身份验证,然后Azure AD会请求授予Azure AD OAuth端点的权限。

请求访问令牌时,必须将其类型设置为requested_token_use=on_behalf_of

以下是对端点https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-protocols-oauth-on-behalf-of

的POST的引用

以下是使用OAuth On-Behalf-Of https://docs.microsoft.com/en-us/outlook/add-ins/authenticate-a-user-with-an-sso-token

进行SSO身份验证的参考