从 UWP 客户端使用 Azure 移动服务进行身份验证

Posted

技术标签:

【中文标题】从 UWP 客户端使用 Azure 移动服务进行身份验证【英文标题】:Authenticate with Azure Mobile Service from UWP client 【发布时间】:2016-07-13 18:37:52 【问题描述】:

我正在努力通过 Azure AD 对 Azure 移动服务(.NET 后端)进行身份验证。 我一直在关注这个教程:https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-how-to-configure-active-directory-authentication/ Azure AD 本身的身份验证成功 (result.Status == AuthenticationStatus.Success),但我在 MobileService.LoginAsync 处收到 HTTP 401。

移动服务 Azure AD 应用配置 登录网址:https://contososervice.azurewebsites.net 客户端 ID:c710fe9b-4dd2-406b-ae68-ea5825c2c103 应用 ID URI:https://contososervice.azurewebsites.net 回复网址:https://contososervice.azurewebsites.net/.auth/login/aad/callback

本机客户端 Azure AD 应用配置 客户端 ID:d79fea3f-2357-4797-9be8-48d630f6e1a3 重定向 URI: - https://contososervice.azurewebsites.net/.auth/login/done - ms-app://S-1-15-2-4177921760-2458829842-3328621796-4043898254-238447652-453539330-2174227773 委派给 ContosoService 的权限

Azure 移动服务身份验证配置:高级模式 客户端 ID:c710fe9b-4dd2-406b-ae68-ea5825c2c103 发行人网址:https://sts.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47

移动服务 web.config<add key="ida:Tenant" value="contoso.onmicrosoft.com" /> <add key="ida:Audience" value="https://contososervice.azurewebsites.net" />

移动服务身份验证设置

    public void ConfigureAuth(IAppBuilder app)
    
        app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            
                Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                TokenValidationParameters = new TokenValidationParameters
                
                    ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
                ,

            );
    

UWP 客户端

        string appIDUri = "https://contososervice.azurewebsites.net";
        string clientID = "d79fea3f-2357-4797-9be8-48d630f6e1a3";

        AuthenticationResult result = await _authContext.AcquireTokenAsync(
            appIDUri,
            clientID,
            WebAuthenticationBroker.GetCurrentApplicationCallbackUri());

        if (result.Status == AuthenticationStatus.Success)
        
            IsUserAuthenticated = true;
            UserData = result.UserInfo;
            success = true;

            JObject payload = new JObject();
            payload.Add("access_token", result.AccessToken);

            var user = await ServiceClient.ServiceClient.MobileService.LoginAsync(
                MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory,
                payload);
        

【问题讨论】:

【参考方案1】:

我实际上设法解决了这个问题。 通过 Visual Studio 远程调试移动服务很有帮助,因为 Microsoft.Azure.AppService.Authentication 跟踪表明:

浏览器请求将令牌发布到https://contososervice.azurewebsites.net/.auth/login/aad/callback,已成功处理 我的客户端应用将令牌发布到 https://contososervice.azurewebsites.net/login/aad,但没有成功。

我花了一段时间才明白,令牌发布到的 URL 实际上与代码中的 appIDUri 相同,因为这也标识了资源,我不得不更改移动服务中相应的 App ID URI 设置Azure AD 应用程序配置。因此,我必须将 Azure AD 中的 appIDUri 和 App ID URI 都更改为https://contososervice.azurewebsites.net/.auth/login/aad/callback现在可以使用了。

【讨论】:

以上是关于从 UWP 客户端使用 Azure 移动服务进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

仅使用 Azure 移动服务 .Net 后端进行推送

如何使用 Azure 移动服务 API 功能

UWP使用AppService向另一个UWP客户端应用程序提供服务

Azure 移动服务与将设备作为服务器的 Web 套接字

Azure 移动服务与将设备作为服务器的 Web 套接字

UWP C# 管道客户端无法连接到 Win32 C++ 管道服务器