认证提供商,采用的设计模式

时间:2014-08-21 02:29:03

标签: authentication design-patterns win-universal-app

我有一个Windows Phone 8.1客户端。此客户端连接到Web API(ASP.NET)并获取支持的身份验证提供程序。目前它的谷歌和Twitter。用户(wp 8.1)可以选择他想要用于认证目的的提供商。

根据手机上选择的提供商,身份验证的底层实施流程不同,换句话说,Google有一个流量,Twitter有另一个流量。因此,我的客户端中有switch语句,如下所示

switch(authProvider)
case: "Google":
  GoogleAuthProvider.PerfomAuthentication();
  break;
case: "Twitter"
  TwitterAuthProvider.PerformAuthentication();
  break;

我的主要问题是我现在很难对提供商进行编码。我的手机应用程序的其余部分使用IOC(MVVMLight),在这种情况下,我很难编码。如何在不明确引用容器的情况下摆脱这种情况?另外,我们可以在稍后的时间点支持额外的auth提供程序,然后根据我需要修改客户端代码的当前实现,如何最小化这个?

1 个答案:

答案 0 :(得分:0)

从您提供的示例中,状态GoF模式将取决于任务,假设身份验证接口是统一的(由一个方法 - PerformAuthentication组成,并且可能包含所有其他可能提供程序中通用的其他方法)。因此,您必须创建接口IAuthenticationProvider并将其实现注入实际执行的逻辑(以前包含switch的逻辑)。

实际上它与通过DI注入的策略非常相似,但是策略只是封装了算法,其中State更强大并且适用于身份验证域(它可能具有...状态和其他方法/属性 - 并不是那么糟糕,对吧?:)

如果您面对具有不同功能和接口的提供程序,您可能希望选择在单个界面的保护下将异构身份验证接口结合在一起的Bridge模式。但在我看来,Bridge的使用在这里将是一个过度工程。