从 UWP 客户端使用 Azure 移动服务进行身份验证
Authenticate with Azure Mobile Service from UWP client
我正在努力通过 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 应用配置
登录 URL:https://contososervice.azurewebsites.net
客户端 ID:c710fe9b-4dd2-406b-ae68-ea5825c2c103
应用 ID URI:https://contososervice.azurewebsites.net
回复URL: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
发行人 URL: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);
}
我实际上设法解决了这个问题。
通过 Visual Studio 远程调试移动服务很有帮助,因为 Microsoft.Azure.AppService.Authentication 跟踪显示:
- 浏览器请求将令牌发布到 https://contososervice.azurewebsites.net/.auth/login/aad/callback,已成功处理
- 我的客户端应用程序将令牌发布到 https://contososervice.azurewebsites.net/login/aad,但没有成功。
我花了一段时间才明白 URL 令牌发布到实际上与代码中的 appIDUri 相同,并且因为它也标识了资源,所以我不得不更改相应的 App移动服务 Azure AD 应用配置中的 ID URI 设置。
因此我不得不将 Azure AD 中的 appIDUri
和 App ID URI 更改为
https://contososervice.azurewebsites.net/.auth/login/aad/callback
现在可以使用了。
我正在努力通过 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.
移动服务 Azure AD 应用配置
登录 URL:https://contososervice.azurewebsites.net
客户端 ID:c710fe9b-4dd2-406b-ae68-ea5825c2c103
应用 ID URI:https://contososervice.azurewebsites.net
回复URL: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
发行人 URL: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);
}
我实际上设法解决了这个问题。 通过 Visual Studio 远程调试移动服务很有帮助,因为 Microsoft.Azure.AppService.Authentication 跟踪显示:
- 浏览器请求将令牌发布到 https://contososervice.azurewebsites.net/.auth/login/aad/callback,已成功处理
- 我的客户端应用程序将令牌发布到 https://contososervice.azurewebsites.net/login/aad,但没有成功。
我花了一段时间才明白 URL 令牌发布到实际上与代码中的 appIDUri 相同,并且因为它也标识了资源,所以我不得不更改相应的 App移动服务 Azure AD 应用配置中的 ID URI 设置。
因此我不得不将 Azure AD 中的 appIDUri
和 App ID URI 更改为
https://contososervice.azurewebsites.net/.auth/login/aad/callback
现在可以使用了。