使用单一身份认证层对多个WebAPI进行身份验证

5

我一直在思考如何简化我们当前/未来的WebAPI的身份验证。虽然我是新手,但我会尽力解释清楚。我们从一个单一的WebAPI开始,并设置 ASP.Net Identity 来处理身份验证等问题。之后我们设置了另一个,很快就会有30个。

What we currently have

这里的问题是显而易见的 - 对于每个新的WebAPI,我们都必须插入另一个MS Identity授权层。在某些情况下,只有一个单一的大型WebAPI可以工作,但在这种情况下,这些是完全独立的产品(加上它的糟糕设计)。
因此,我们希望实现类似于这样的东西:

What we've been asked to do

但我很难弄清楚每个WebAPI如何获取用户信息,以便我可以检查角色等信息。我已经阅读了许多关于WebAPI身份验证的帖子,例如:this thisthis,但似乎我找到的所有内容都与保护单个WebAPI有关,而我们已经知道如何做到这一点。感觉我们需要为我们的WebAPI采用SSO方法。几乎感觉我们需要像使用自己的后端数据库那样使用外部身份验证方法(如Facebook、Twitter等),但我不知道正确的术语。因此,我求助于专家,帮助我朝着正确的方向前进。
  • 每个WebAPI都有自己的身份验证/授权层,它们都指向同一个数据库,这是常见的做法吗?
  • 单一身份验证层的概念是否已经内置在WebAPI/Identity中,还是我需要从头开始构建?
  • 身份验证过滤器 是我们应该使用的吗?

我可以在幕后将所有内容都拼凑在一起,但感觉好像有一个明显的答案我却没有想到。

是否有一种内置的方式来建立每个WebAPI和身份验证API之间的“信任”,以实现这样的功能:

Trust flow

这是我们目前正在走的方向:

Current Direction

如果能给我一个大概的方向,我就会非常高兴。我只是不想重复造轮子。
哦,还有,在这里提醒一下,我们正在使用asp.net 4.5、WebAPI 2、Identity 2和IIS。
感谢您提供任何指导。
2个回答

2

是的,我今天也看到了关于那个的内容,但我在上面的请求中没有提到它。我退缩了,因为我读到其他人的评论说你不想那样做。然而 - 基于你的SO分数和建议,听起来我需要自己研究和学习它。那就是我今晚的功课!谢谢Russ。 - PRB
@PRB - 不用担心。联合身份、基于声明的身份、WS-Federation、SAML、STS等可能是一个难以驾驭的领域。我曾经看到IdentityServer成功地为许多Web API提供了基于声明的身份。我不会称自己为安全专家,所以只能建议您进行研究并得出自己的结论。我还建议您下载基于声明的身份和访问控制的PDF文件-https://msdn.microsoft.com/en-us/library/ff423674.aspx - Russ Cam

1

不是要给出一个过于简单的答案,但你是否可以在其他API周围构建一个API fasad。顶层API处理所有授权并将调用转发到其他API。我不是架构师,但这就是我会做的。


是的,你说得对。这种方法就是我们在上面提到的“一体化WebAPI”中所考虑的,但这个Facade必须了解每个WebAPI中的每个方法。如果我们想要建立一个只设置了几个WebAPI的极简服务器,那么就需要进行代码更改。我希望这样说得清楚,但我确实要感谢你提出这个问题,因为我在最初的陈述中并不是很清楚。 ;) - PRB
我可能没有表达清楚的另一件事是,每个WebAPI目前都有数百个端点,因此为它们设置一个门面将是一项相当大的任务(除非我对此有所疏忽),并且随着我们添加新的API,情况会变得更糟。除非有一种方法可以盲目地传递它们?[叹气]不确定那里是否有。但这实际上更倾向于在那一点上进行身份验证过滤器-它不关心您正在请求什么,它只是执行其工作并将请求传递下去。谢谢Will! - PRB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接