2016-11-12 62 views
0

我已经部署了API App天青,但我有,如果验证(与AAD)设置为ON创建API客户端的问题。如何饮用Azure的REST API应用程序与Azure的Active Directory的授权在

当我尝试生成服务客户端(当身份验证为OFF时),然后生成客户端代码(使用Autorest完成)并且代码正常工作,但是当我切换身份验证开启时(以及在请求未通过身份验证时采取的操作被设置为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..."(和“没有附加信息可用“)

我(使用Express设置)根据本Azure的手动实现AAD:

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-what-s-new-in-app-service-api-apps/

有什么建议?

编辑

1)如果我输入请求的URL(即REST API客户端使用)的网络浏览器 - 然后返回结果有效 2)我发现我使用REST API无凭据(我认为Azure的AD登录屏幕应该在这种情况下提出的...但它不是)

EDIT 2

我得到了一些进步 - 到了AAD登录屏幕,但进入后华创dentials我得到的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应用注册 - >端点=>联邦元数据文档vērtība(无起始部分http://login.windows.net/

-resource =>这是REST API URI(=>目标资源的标识符这是收到的请求令牌的收件人)

-clientId =>这是我注册客户端应用程序在AAD后得到的应用程序ID -redirect Uri =>因为我的客户端应用程序是本机应用程序,那么这只是任何有效的网址

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

client has not specified this resource in its requiredResourceAccess list

回答

1

我设法找到如何使AAD授权Azure的REST API应用程序的解决方案。以防万一任何人有相同的挑战,我希望这会有所帮助。

这些是我没有以下步骤:

1)在应用程序的服务 -

  • 应用服务认证=>开
  • 采取的措施时请求没有被认证>认证/授权=>使用AAD登录
  • 使用快速设置配置AAD(您必须为您的API应用程序创建Azure AD App - 即为您的服务器提供“应用程序注册”冰)

2)在Azure中的Active Directory - >应用注册

  • 添加注册为您的客户端应用程序
  • 您的客户端应用程序的编辑清单 - 在requiredResourceAccess部分必须添加关于REST的信息API应用程序:
    • resourceAppId - >在此处插入REST API应用程序ID
    • resourceAccess {id} - > OauthPer REST API的任务ID值(您可以在REST API的清单中找到它!)

3)在客户端应用程序

  • 生成使用Autorest(从溶液Explorer的REST客户端:Add\REST API client)或手动创建它
  • 添加Microsoft.IdentityModel.Clients.ActiveDirectory的NuGet包
  • 获取并使用令牌以类似于此的代码访问您的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); 
    } 
    
+0

P.S.此资源为我提供了查找解决方案所需的大部分资源http://developers.de/blogs/damir_dobric/archive/2016/05/24/aad-authentication-with-rest-api-client.aspx – Prokurors