目前,我有一个应用程序,它使用Azure移动应用程序服务来管理离线同步和身份验证。身份验证是通过Azure Active Directory完成的,我设置它的方式是将web api发布为azure上的应用程序服务,并在Active Directory部分中将其配置为应用程序。在Xamarin.Forms中完成的原生应用程序也在azure中进行了配置,以便无论何时应用程序发出请求,它都可以正确地使用应用程序编程接口进行身份验证。
我现在要做的是将此web api放入一个本地服务器中。我必须这样做,以便优化在检索数据时遇到的一些延迟问题。我的问题是,我如何在使用Azure Active Directory作为我的身份验证器的同时,将离线同步功能与内部服务器中的api一起使用。
我遇到的主要问题是实现的身份验证部分。
我很感谢你的帮助。
发布于 2018-01-19 09:17:17
根据您的描述,您正在使用Authentication and authorization in Azure App Service进行内置身份验证,而无需更改应用程序后台的代码。Authentication / Authorization for Azure App Service
(Easy Auth)是作为一个运行在Azure端的原生IIS模块实现的,详细信息你可以关注Architecture of Azure App Service Authentication / Authorization。
我的问题是,我如何在使用Azure Active Directory作为我的身份验证器的同时,将离线同步功能与内部部署服务器中的api一起使用。
AFAIK,我们无法安装本地IIS模块easyauth.dll
。根据您的场景,您需要做一些额外的工作来实现您的目标。
对于.NET后端,您可以使用JWT中间件来验证令牌( Microsoft.Azure.Mobile.Server.Authentication authenticationToken)。注意:这个中间件用于本地开发和调试您这边的移动应用程序.net服务器。
适用于Client-managed authentication流的
你需要在你的应用后台添加一个额外的端点,用于接收AAD返回给客户端用户的access_token
,然后你的应用后台将使用访问令牌来访问已登录的用户端点(例如https://graph.windows.net/me?api-version=1.6)来检索用户的基本信息,然后将用户信息编码为JWT令牌并返回给您的客户端。下面是一个生成JWT令牌的示例,您可以参考it。
注意:应用程序服务内置身份验证还将为移动客户端生成authenticationToken。对于此方法,您将手动检索登录的用户信息,并通过yourself.
你需要提供登录端点并将用户重定向到AD授权端点,然后你的应用后端接收authorization_code并检索access_token,然后通过access_token访问已登录的用户信息,然后将用户声明编码到JWT authenticationToken并将令牌(例如https://{your-domain}/.auth/login/done#token={the-json-string-of-LoginResult}
)重定向到客户端用户。
注意:以上两种方法用于在您的本地服务器中实现Easy Auth中的一些类似功能。
此外,您可以只使用用于AAD v1.0端点的中间件UseWindowsAzureActiveDirectoryBearerAuthentication或用于AAD v2.0端点的UseOAuthBearerAuthentication来投影您的web,而不是Microsoft.Azure.Mobile.Server.Authentication提供的身份验证中间件。以下是一些教程,您可以按照它们进行操作:
Azure AD .NET Web API getting started
Secure an MVC web API with AAD v2.0 endpoint
对于这种方法,您的移动客户端可以利用ADAL或MSAL客户端库来获取令牌。然后,在实现MobileServiceClient
实例时,您可以指定一个自定义DelegatingHandler,用于将带有该值的authorization header添加到您作为Web API后端的持有者令牌获取的访问令牌中。详细信息您可以按照Working with the client SDK下的How to: Customize request headers部分进行操作。
https://stackoverflow.com/questions/48329493
复制相似问题