在Azure AD中,我有以下情况:
经过身份验证的用户以其身份使用WebAPI 1。
WebAPI 1中的某些操作需要在不同的身份(服务到服务)下使用WebAPI 2,因此需要在不同的身份(服务帐户)下请求访问令牌。我在WebAPI中使用ADAL.NET。
我已阅读MS文档(here)以了解不同的方案/协议,但我看不到任何符合此情况的内容,我需要代表其他用户请求访问令牌已经过身份验证的用户。
我研究了使用ADAL来验证用户名和用户名的用户。密码(出于好奇心),但似乎不可能(described here)来自网站/ WebAPI(仅限本机客户端)。
有谁知道为不同用户获取经过身份验证的用户的令牌的最佳方法是什么?
答案 0 :(得分:0)
你不能,但你不应该(并且有更好的方法)。
通常,机密客户端(例如API)应从不代表未实际登录并授予该应用授权的用户拥有访问令牌。对于希望向后端API(WebAPI 2)发出经过身份验证的请求的WebAPI 1等中间层API,您有两种选择:
听起来你的情景应该属于第二种方法。 WebAPI 1将获取仅限应用程序访问令牌到WebAPI 2,并在WebAPI 2请求中使用它。反过来,WebAPI 2必须理解访问令牌也只能用于应用程序(不是用户),并且必须根据应用程序的身份(而不是用户身份)执行授权。
使用ADAL for .NET,您可以使用以下任一方式代表客户端(在本例中为WebAPI 1)获取访问令牌:
AcquireTokenAsync(String, IClientAssertionCertificate)
,客户端验证using a certificate(最佳做法)。AcquireTokenAsync(String, ClientCredential)
,客户端使用客户端密钥进行身份验证(不是最佳做法)。