C# 单点登录-API版本控制和共享数据传输对象

C# 单点登录-API版本控制和共享数据传输对象,c#,.net,asp.net-web-api,single-sign-on,api-versioning,C#,.net,Asp.net Web Api,Single Sign On,Api Versioning,我使用以下体系结构为我的web应用程序实现了SSO 这些是基本流程: 现在从概念上讲,我觉得还可以,但困扰我的是,所有应用程序都依赖于SSOWebAPI 如果SSO Web Api发生了变化,所有的应用程序都可能突然停止工作——有什么好的方法可以对Web Api进行版本控制以使其向后兼容 如果SSOAPI有用户的DTO对象(用户名、电子邮件、角色、函数),这意味着我必须以某种方式与App1和App2共享它们。我考虑过使用wsdl的SOAP,但我希望使用webapi,因为它在客户端方面更灵活,

我使用以下体系结构为我的web应用程序实现了SSO

这些是基本流程:

现在从概念上讲,我觉得还可以,但困扰我的是,所有应用程序都依赖于SSOWebAPI

  • 如果SSO Web Api发生了变化,所有的应用程序都可能突然停止工作——有什么好的方法可以对Web Api进行版本控制以使其向后兼容
  • 如果SSOAPI有用户的DTO对象(用户名、电子邮件、角色、函数),这意味着我必须以某种方式与App1和App2共享它们。我考虑过使用wsdl的SOAP,但我希望使用webapi,因为它在客户端方面更灵活,并且是WCF的继承者。我想到的一件事是将SSOAPI的DTO对象放入单独的类库项目中,并在App1和App2中引用它

  • 编辑:对于具有基于角色/功能的授权的intranet应用程序,我需要这个。关于您的两个问题:对于像您这样的用例,有完善的标准。看看和/或更老、更具进取心的,/


    无论如何,滚动您自己的安全性通常不是一个好主意,您应该避免()。对于一个现成的解决方案,请看一看。

    这看起来像是一个自行开发的SSO解决方案。我建议你不要建造自己的

    另一方面,要回答您的问题:

    问题1:您必须对API进行版本设置。有几种方法可以对其进行版本设置。最简单的可能是在路由中有一个版本号,如: “api/v2/sso”


    问题2。如果有DTO,则可以创建仅包含该DTO的库项目。您可以通过在App1和App2项目中将库作为DLL硬引用来共享库,也可以将其作为nuget包分发。我更喜欢nuget软件包-您可以拥有一个基于web(托管在IIS中)的nuget服务器,也可以将其作为网络中的共享驱动器。

    感谢您回答我的两个问题nuget服务器似乎是一个非常有趣的想法。如果项目是源代码控制的(例如git),应该如何管理它?关于SSO-有什么建议吗?我确实查阅了OAuth,但它让我感到困惑(它似乎更多地是关于授权,而不是基于传统角色,而是让用户控制第三方如何访问他们的资源,这不是我所需要的)。所以要使用构建在OAuth之上并支持SSO的库,如果我只需要集中身份验证和基本的基于角色的授权,这似乎有点过分了?