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

时间:2016-03-25 23:11:09

标签: azure authentication azure-mobile-services adal

我正在努力通过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 个答案:

答案 0 :(得分:0)

我实际上设法解决了这个问题。 通过Visual Studio远程调试Mobile Service有所帮助,因为Microsoft.Azure.AppService.Authentication跟踪显示:

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