当前位置: 首页 > 知识库问答 >
问题:

Azure AD不同数量的客户端和服务器声明

华衡
2023-03-14

我们需要将AzureAD身份验证流程集成到现有项目中。所以我在这里找到了可用的示例代码。它基本上包含两个web项目。MVC项目作为客户端,Web API作为服务器。

我们考虑使用JWT令牌中的“upn”声明来唯一标识登录用户。我运行了示例代码并能够在Azure AD中验证用户。当我检查从jwt的AAD获得的访问令牌时。io索赔部分不包含“upn”,但我可以使用ClaimsPrincipal在客户端检索“upn”。现在的FindFirst(ClaimTypes.Upn)。添加此访问令牌作为承载授权标头,并调用web api。在这里,我无法使用ClaimsPrincipal检索“upn”索赔。现在的FindFirst(ClaimTypes.Upn)。此声明的值为null。我需要做任何额外的配置才能进入服务器端吗。到目前为止,我只能在客户端检索upn。

共有1个答案

凤凡
2023-03-14

有关的示例项目:

以应用程序的身份而不是用户的身份调用web API

在TodoListController的第95行,它获取具有以下内容的令牌:

result = await authContext.AcquireTokenAsync(todoListResourceId, clientCredential);

它以自身的身份调用API,因此它是仅应用程序调用,而不是委托调用。因此,不存在UPN。不过,您会发现一个appid声明,用于标识调用的应用程序。

检查对API进行委托调用的另一个示例:https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect/blob/master/TodoListWebApp/Controllers/TodoListController.cs

正如您在这里看到的,获取令牌的调用是完全不同的:

string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
AuthenticationContext authContext = new AuthenticationContext(Startup.Authority, new NaiveSessionCache(userObjectID));
ClientCredential credential = new ClientCredential(clientId, appKey);
result = await authContext.AcquireTokenSilentAsync(todoListResourceId, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));

请注意,身份验证配置也不同:https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect/blob/master/TodoListWebApp/App_Start/Startup.Auth.cs.

 类似资料:
  • 我有一个客户端服务器的情况,每一方都在测量时间,但似乎有一个问题,即测量的时间不匹配。长话短说,这个想法是有一个倒计时,之后程序需要做事情。我在服务器端测量这个。但是,倒计时需要显示,所以我所做的是在客户端单独运行它。最终结果是,当服务器发送消息时,客户端显示为23秒,该消息表明时间倒计时为10分钟。 客户端为XNA,代码: 然后从可用时间中减去计时器,并显示出来。在服务器端,这种情况正在发生:

  • 我正在学习系统如何将数百万个连接扩展到一个盒子。 通过早期的一套学习TCP 3路握手,NIO接受连接的方式。我运行了多个测试(简单的客户端-服务器代码),并一直遵循计数器- 在服务器上成功接受的次数() 在客户端成功打开()的次数,即成功计数 在客户端,成功的总和很重要 Ex:要启动的连接数N=10_000 场景1:(没有被服务器拒绝的连接,即在调用opne()时客户端没有引发异常) 服务器成功计

  • 问题内容: 我正在寻找一些通用策略,用于将中央服务器上的数据与并不总是在线的客户端应用程序进行同步。 在我的特定情况下,我有一个带sqlite数据库的android手机应用程序和一个带MySQL数据库的PHP Web应用程序。 用户将能够在电话应用程序和Web应用程序上添加和编辑信息。我需要确保即使手机无法立即与服务器通信,在一个地方所做的更改也会在所有地方反映出来。 我不关心如何将数据从手机传输

  • 嗨,我的问题很简单: 我尝试通过TCP连接建立UDP连接(因为多个客户端通过多个通道连接到服务器,我想通过主TCP连接识别相同的客户端) 我通过在客户机上创建TCP和UDP套接字来实现这一点,并通过TCP将操作系统随机分配的本地UDP端口传输到服务器。(在Windows上,我通过getsocketname()获得sendto()之后的端口)。在服务器上,我使用这个端口将UDP数据包发送到这个客户机

  • 我使用python中的套接字设置了一个客户机和一个服务器,客户机向服务器发送数据,服务器执行操作,然后向客户机返回一些数据。最初,客户端和服务器将具有相同的端口号(9999)。我目前的问题是,我必须将服务器端口更改为19999,当我试图运行时,它无法工作。客户端能够发送数据,如果它的端口也更改为19999,但它不工作,如果客户端是9999和服务器是19999,这是我需要的。新的网络系统,所以将感谢

  • 问题内容: 我用Node.js运行一个简单的http服务器: 我的index.html文件: 现在,我想在我的index.html文件中打印服务器端变量:temp。但是我不知道该怎么做。 也许有人可以帮助我从服务器到客户端交换变量。 问题答案: 正如您可以在@WebServer的答案中看到的那样,节点中有多种模板引擎。 我想给你一个使用其中一个的例子-EJS: 首先安装它: server.js: