如何使用Azure REST API应用程序与Azure Active Directory授权打开



我已经将API App部署到Azure,但是如果身份验证(使用AAD)设置为ON,则我在创建API客户端时遇到问题。

当我尝试生成服务客户端(当身份验证是OFF),然后生成客户端代码(它是用Autorest完成的)和代码正在工作,但是当我切换身份验证ON(和请求未经过身份验证时采取的行动设置为Login with Azure Active Directory),然后

1)业务呼叫返回401 Unauthorized(未重定向到AAD登录页面)

2)然后我尝试再次生成服务客户端(从项目的上下文菜单->添加-> REST API客户端->然后在对话框中我选择"选择Azure资产"并按下确定,并得到一个消息"Failed to download metadata file for Microsoft Azure API App: ...app name..."(和"没有额外的信息可用")

我是根据这个Azure手册实现AAD的(使用express设置):

https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-how-to-configure-active-directory-authentication/

是根据这个视频工作,太和一切在这个视频中显示的工作,除了AAD没有演示…对我来说,这是行不通的…

https://azure.microsoft.com/en——us/documentation/videos/connect - 2015 - s -新- -应用程序-服务- api - apps/

有什么建议吗?

编辑

1)如果我在web浏览器中输入请求url (REST API客户端使用)-然后它返回有效的结果2)我发现我正在使用没有凭据的REST API(我认为Azure AD登录屏幕应该在这种情况下呈现…但它不是)

编辑2

我得到了一些进展-得到了AAD登录屏幕,但在输入凭据后,我得到了bearer token,但当我试图查询服务时,我得到一个错误消息:

AADSTS65005: The client application has requested access to resource 'https....azurewebsites.net'. This request has failed because the client has not specified this resource in its requiredResourceAccess list. Trace ID: 4176e... Correlation ID: 1d612d... Timestamp: 2016-11-13 18:28:34Z

到目前为止,我已经完成了这些步骤:

0)添加Microsoft.IdentityModel.Clients.ActiveDirectory nuget包到客户端项目

1)在Azure Active Directory中注册我的客户端应用程序

2)当从客户端应用程序调用REST API时,我添加了ServiceClientCredentials

3)当创建ServiceClientCredentials时,我提供了4个元素-authority =这是来自AAD App注册-> Endpoints => Federation元数据文档vērtība(不含起始部分http://login.windows.net/)

-resource =>这是REST API uri(=>目标资源的标识符,即所请求令牌的接收者)

-clientId =>这是我在AAD注册客户端应用程序后得到的应用程序id-redirect Uri =>由于我的客户端应用程序是一个本机应用程序,那么这只是任何有效的url

如何在客户端应用程序中指定此资源?

client has not specified this resource in its requiredResourceAccess list

我设法找到了一个解决方案,如何启用AAD授权Azure REST API应用程序。以防有人有同样的挑战,我希望这将是有帮助的。

以下是我所做的步骤:

1)在App服务中->认证/授权

  • App Service Authentication => On
  • 请求未通过身份验证时采取的操作=>使用AAD登录
  • 配置AAD与快速设置(在那里你必须创建AzureAD应用程序为您的API应用程序-即。"应用程序注册"为您的服务)

2)在Azure Active Directory -> App注册

  • 为您的客户端应用程序添加注册
  • 编辑你的客户端应用程序的Manifest -在requiredResourceAccess部分你必须添加关于REST API应用程序的信息:
    • resourceAppId ->在这里插入REST API应用程序id
    • resourceAccess {id} -> OauthPermission id值的REST API(你可以得到它在REST API的清单!)

3)在客户端应用程序

  • 使用Autorest(从解决方案资源管理器:AddREST API client)生成您的REST客户端或手动创建
  • add Microsoft.IdentityModel.Clients.ActiveDirectory nuget pack
  • 获取并使用令牌访问API,代码类似如下:

        //request
        (..)
        var tokenCreds = getToken();
        ServiceClientCredentials credentials = tokenCreds;
        using (var client = new YourAPI(credentials)) {
        ...
        }
        (..)
        //getting token
    private static TokenCredentials getToken()
    {
        //get this from Federation Metadata Document in 
        //Azure Active Directory App registrations -> Endpoints
        var authority = "f1...";
        //Identifier of the target resource that is the recipient of the requested token
        var resource = "https://yourapi.azurewebsites.net";
        //client application id (see Azure Active Directory App registration
        //for your client app
        var clientId = "a71...";
        //return url - not relevant for Native apps (just has to be valid url)
        var redirectUri = "https://just-some-valid-url.net";
        AuthenticationContext authContext =
        new AuthenticationContext(string.Format
        ("https://login.windows.net/{0}",
    authority));
        AuthenticationResult tokenAuthResult =
        authContext.AcquireTokenAsync(resource,
        clientId,
        new Uri(redirectUri),
        new PlatformParameters(PromptBehavior.Auto)).Result;
        return new TokenCredentials(tokenAuthResult.AccessToken);
    }
    

相关内容

  • 没有找到相关文章

最新更新