c# - 如何从同一 Azure AD 中的另一个 Web 应用程序访问 Web api?

标签 c# azure asp.net-web-api azure-active-directory

我在 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/

相关文章:

c# - 关闭表单后进程没有关闭

sql-server - SQL Azure/EF Code First - 用户登录失败 'myUserName'

azure - 本地 Azure 云服务(模拟器)将无法运行

c# - 全局与成员函数

c# - XmlDocument 与 XmlWriter

c# - Autofac - DelegatingHandler (HttpMessageHandler) 注册

c# - 在 mvc asp.net 的浏览器中找不到 API Controller

c# - ASP.NET Web API HTTP 400 错误请求

c# - 正则表达式缩进 - 将制表符保留在行首

azure - 保护 SSMS 连接和对 SQL Azure DB 的查询免遭中间人攻击