如何在Xamarin表单中为MobileServiceClient保护Azure应用程序服务端点



我有一个使用Auth0的应用程序https://auth0.com/作为登录提供商,可以通过多个提供商登录-Facebook、LinkedIn、谷歌、微软和苹果。这一切都发生在客户端,我从相关服务获得id和访问令牌。没有错误。

然后,我的应用程序使用Microsoft.WindowsAzure.MobileServices API连接到Azure应用程序服务我用它来创建到服务的连接:

client = new MobileServiceClient(https://mycompany.azurewebsites.net);

然后,该应用程序可以在本地SQLite数据库和我的Azure SQL数据库之间同步数据。这一切工作,没有错误。

问题-终点https://mycompany.azurewebsites.net设置为匿名访问,并且不安全。

我可以启用应用程序服务身份验证,并为大多数身份验证服务实现类似的功能,传递登录时已经收到的令牌:

task = Task.Run(async () => await client.LoginAsync(MobileServiceAuthenticationProvider.Facebook, AccessToken));
user = task.Result;

这对MS、Facebook和Google身份验证很好,但LinkedIn或Apple的API中没有任何内容。

如果用户还可以选择其他提供商的登录选项,则需要Apple认证和Apple登录

问题:我如何确保Node.js中的Azure应用程序服务接受我可以从客户端提供的应用程序ID和/或密码或令牌作为常量,以简单地允许对该URL的通用但有点安全的访问:https://mycompany.azurewebsites.net并且没有匿名访问权限?并且不要使用有限的应用程序服务身份验证。

有人能解释一下吗?这是该应用程序最终进展中的一个主要障碍。

我确实遇到了这个问题,但需要一些Node.js和Azure应用程序服务特定的东西。Azure移动服务,HttpClient,授权

谢谢

这应该很容易实现。

  1. 更新您的服务端,使其实现您需要的身份验证机制
  2. 创建一个DelegatingHandler来实现身份验证机制
  3. 按照以下步骤重新创建连接:
var client = new MobileServiceClient(url, new MyDelegatingHandler());

委派处理程序可能就这么简单:

public class MyDelegatingHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken token)
{
request.Headers.Add("X-Api-Key", "MyApiKey");
return base.SendAsync(request, token);
}
}

这只是用API键为每个请求添加一个头,然后在服务器端检查。对于苹果/领英/其他公司,您可能希望以这种方式直接使用授权标头来集成它们。基本上,您存储授权标头";"某处";在客户端代码中,完成身份验证后,使用委托处理程序添加授权头。在服务器端,您可以以ASP.NET或Express应用程序的正常方式验证该授权标头。

最新更新