Asp.net web api 什么时候基于索赔的身份不是正确答案?

Asp.net web api 什么时候基于索赔的身份不是正确答案?,asp.net-web-api,claims-based-identity,claims,Asp.net Web Api,Claims Based Identity,Claims,我目前正在与一家公司签约,该公司正在为一套新的多租户应用程序做出架构决策。另一个承包商坚持认为我们应该使用基于索赔的身份。我知道这是现在最热门的事情,但考虑到客户的情况,我不愿意肯定他的建议 这些应用程序将面向服务,构建在.NET堆栈上,并严重依赖ASP.NET Web API。客户端应用程序(Web、移动和WPF)将相当愚蠢,使用Web API服务实现业务规则/功能 服务的一个子集将被视为单独的产品,并将公开供公司的业务合作伙伴使用 这些应用程序将作为托管解决方案和内部部署解决方案提供,因为他

我目前正在与一家公司签约,该公司正在为一套新的多租户应用程序做出架构决策。另一个承包商坚持认为我们应该使用基于索赔的身份。我知道这是现在最热门的事情,但考虑到客户的情况,我不愿意肯定他的建议

这些应用程序将面向服务,构建在.NET堆栈上,并严重依赖ASP.NET Web API。客户端应用程序(Web、移动和WPF)将相当愚蠢,使用Web API服务实现业务规则/功能

服务的一个子集将被视为单独的产品,并将公开供公司的业务合作伙伴使用

这些应用程序将作为托管解决方案和内部部署解决方案提供,因为他们的一些客户希望自己托管所有内容,甚至可能无法访问互联网

无论是在托管解决方案上还是使用on-prem解决方案,每个“租户”都将负责维护其用户帐户、安全组和组成员资格

对于本地解决方案,我们不能假设主机位置将有Active Directory或任何其他基础设施。事实上,我们应该假设他们除了我们给他们的东西什么都没有

我理解基于声明的身份背后的概念,但我不认为这样的场景有什么好处。客户端不(也永远不会)希望用户使用Facebook、Google等的Id登录。每个用户都将使用其电子邮件地址登录,可以是gmail帐户或MomAndPopsEmailDomain.com电子邮件地址

为了使用声明实现这一点,我们是否必须为该公司构建一个STS,该STS可以用于其托管解决方案,也可以与任何内部安装一起分发以供独立使用?如果是这样的话,与我们自己的会员资格/身份提供者相比,这有什么好处?我们自己的会员资格/身份提供者认证用户并生成用户的授权令牌(组会员资格信息)


声明是否使针对WebAPI服务进行身份验证变得更容易?

基于声明的身份验证很好,但从您描述的情况来看,它可能不是该场景的最佳选项,因为如果需求发生变化,它将使您陷入困境。就我个人而言,我会将OAuth 2.0与我自己的OAuth安全服务(可以是现有web api的一部分)结合使用,因为它在处理您无法控制的移动应用程序时更像是一种标准,并且它将您的系统设置为能够维护用户名和密码

你说客户端应用程序维护用户名和密码。因此,我将有一个OAuth安全服务,它将分发一个带有刷新令牌的承载令牌。客户端应用程序将获得一个您的系统将维护的api密钥,当他们请求令牌时,他们需要提供该api密钥,您将验证该api密钥并发送回令牌。从那里,客户机将在http头中随每个请求发送该令牌。当令牌过期时,刷新令牌可用于获取新令牌

如果要求更改为系统需要维护用户名和密码的位置,则只需修改OAuth令牌服务器,以便除了api密钥之外,还可以对用户进行身份验证/授权。然后,对于具有密码的用户,OAuth安全服务将有一个重定向地址,指向客户端将显示的登录页面,最终用户将登录该页面。这样,客户端应用程序就看不到用户名和密码

这里有一段很好的视频-

下面是一个如何实现承载令牌的示例。在Thinktecture.IdentityModel/samples/OAuth2/EmbeddedResourceOwnerFlowWithRefreshTokens/EmbeddedAuthorizationServer-

我希望这有帮助