C# 使用ASP.NET Core web app和.NET Core API进行ADFS单点登录

C# 使用ASP.NET Core web app和.NET Core API进行ADFS单点登录,c#,.net,asp.net-core,.net-core,C#,.net,Asp.net Core,.net Core,我有一个.NET核心应用程序,由一个web前端组成,在React JS中作为一个单页应用程序编写,并由一个.NET核心API服务应用程序支持,以提供其数据。它们在IIS中作为单独的应用程序部署,因此URL如下所示 https://example.com/FooBar https://example.com/FooBarAPI 我的任务是将FooBar站点与我们公司的SSO集成,该SSO使用SAML并针对ADF进行身份验证。他们向我提供了一个来自ADFS的元数据xml文件,据我所知,该元数据包含

我有一个.NET核心应用程序,由一个web前端组成,在React JS中作为一个单页应用程序编写,并由一个.NET核心API服务应用程序支持,以提供其数据。它们在IIS中作为单独的应用程序部署,因此URL如下所示

https://example.com/FooBar
https://example.com/FooBarAPI
我的任务是将FooBar站点与我们公司的SSO集成,该SSO使用SAML并针对ADF进行身份验证。他们向我提供了一个来自ADFS的元数据xml文件,据我所知,该元数据包含我需要在web.config中输入的所有详细信息,以使其正常工作。我在stackoverflow上找到了一些很好的例子,可以保护FooBar站点免受未经授权的访问,并使用SSO

但是javascript需要调用的API应用程序呢?那块拼图怎么拼?API如何知道JS客户端是同一个应用程序/用户的一部分,并且它们经过身份验证以发出数据请求

API如何知道JS客户端是同一个应用程序/用户的一部分,并且它们经过身份验证以发出数据请求

标识JS客户端。隐式流及其产生的
id\u令牌
标识最终用户

这些是非常高级别的步骤:

  • 注册JS客户端(公共客户端)
  • 从JS客户端,使用ADFS隐式流获取最终用户
    id\u令牌
  • 从JS客户端,使用
    id\u令牌调用API
  • 看起来与您的用例相当匹配,并提供了一个高层次的概述:

    …当用户登录时,JavaScript前端使用Active Directory JavaScript身份验证库(ADAL.JS)和隐式授权授予从Azure AD获取ID令牌(ID_令牌)。令牌被缓存,客户端在调用其Web API后端时将其作为承载令牌附加到请求中,这是使用OWIN中间件保护的

    如果我处在你的位置,我会先和我的ADFS房客合作。然后,我会将其设置转换为我的React/ASP.NET核心应用程序