我在 Azure 上托管了一个 Web API ProductInfo
并将该应用程序注册到 Azure AD 中。
我有另一个 Web 应用程序 UIProduct
并且此 Web 应用程序想要访问 Web api ProductInfo。两者都位于同一域和同一 Azure AD 中。
如何从 Web 应用 UIProduct
访问 Web API ProductInfo
?
我需要再次生成任何 token 吗?
代码示例取自this link .
成功登录后,我将进入主页,然后单击我编写此内容的“关于”页面。
public async System.Threading.Tasks.Task<ActionResult> About()
{
AuthenticationResult result = null;
string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
AuthenticationContext authContext = new AuthenticationContext(Startup.Authority, new NaiveSessionCache(userObjectID));
ClientCredential credential = new ClientCredential(clientId, clientSecret);
result = await authContext.AcquireTokenSilentAsync("App ID URI", credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://demotest.azurewebsites.net/api/getdata");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
HttpResponseMessage response = await client.SendAsync(request);
获取异常:
Failed to acquire token silently as no token was found in the cache. Call method AcquireToken
最佳答案
您需要在 Azure portal 中注册这两个应用程序。两者都作为 Web 应用程序/API。
然后在您的 Web API 中,设置应用 ID URI
并创建您想要公开的任何范围。如果这是您将使用的唯一客户端,您可能只能拥有一个Access
范围,但请记住,这是最终用户在同意您的应用时将看到的内容。
在您的 Web 应用中,您将能够为此新的 Web API 和范围设置所需权限
。这表明客户端应该要求获得此 Web API 的同意,并且可以为其授予访问 token 。
This code sample涵盖了这个确切的场景。
web API basics文档还涵盖了与此场景相关的一些概念信息
关于c# - 如何从同一 Azure AD 中的另一个 Web 应用程序访问 Web api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52727641/