- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个类似 Web 应用程序的仪表板。外部系统的状态变化应通过 SignalR 推送到浏览器。外部系统将其更新发送到 Azure 服务总线主题。我编写了一个 Azure 函数,它将由其中一个主题触发。该函数通过 SignalR .Net 客户端库连接到 SignalR 集线器,并将消息转发到集线器。然后集线器将消息发送到浏览器。
目前效果很好。下一步是启用 SignalR 集线器的身份验证。 Web 应用程序的其他部分需要身份验证。用户使用其 Azure AD 凭据登录。
问题是 Azure 函数如何针对 SignalR 进行身份验证?在 Azure Function App 的应用设置中保存一些凭据是不行的。
我研究了 SignalR 横向扩展技术的解决方法。我们可以将服务总线主题配置为背板。每个 SignalR 集线器都会将消息的副本发送到主题中,以便集线器的其他实例获取该消息并将其推送到其连接的客户端。这个想法是 Azure 功能将状态信息推送到背板主题中。但遗憾的是 SignalR 使用了未知的编码。所以这个解决方法是不可能的。
@astaykov 回答的详细信息
将应用角色添加到 SignalR 的应用注册中。
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"displayName": "Access SignalR Backend",
"id": "239de039-e2c5-445c-8454-ccdc51888b94",
"isEnabled": true,
"description": "Allow the application to access SignalR Backend.",
"value": "access"
}
],
在 Azure Function App 的应用注册中创建 key ,并在获取 token 时使用它。
var ctx = new AuthenticationContext(tenant);
var cred = new ClientCredential(functionAppRegistrationId, key);
AuthenticationResult result = await ctx.AcquireTokenAsync(signalRRegistrationId, cred);
最佳答案
您提出两个问题。所以我将分别处理它们。
The question is how can the Azure function authenticate against SignalR? Saving some credentials in the app settings of the Azure Function App is a no go.
正如 @GreameMiller 已经提到的,您应该考虑使用 OAuth Bearer Token 来验证 SignalR。对于您的 Azure Function App,您可以 create a Service Principal in your Azure AD并使用它来获取您的 SignalR 的有效 token (它必须是另一个 Application in Azure AD ,或者与您的网络应用程序相同)。后者您可能已经完成,您将需要获得前者。
一件非常重要的事情 - 一旦你同时获得 "applications" (Service Principals)在 Azure AD 中,您必须通过在 Azure AD 门户中明确授予这些权限来确保“函数应用服务主体”有权访问“SignalR Web 应用程序”。再次来自 that article ,您必须进入“功能应用”应用程序的配置设置,并确保配置“其他应用程序的权限”。如果您已正确配置您的 Web 应用程序(使用 SignalR),您将在可用于配置的应用程序列表中看到该应用程序,并且只有一个选项 - 访问您的应用程序名称。您必须使用应用程序权限
,而不能委派权限
。
其余工作是标准 OAuth2 客户端编程 - 客户端 ID + 客户端密码。但是,是的,您必须将它们保留在 Function App 的函数中。不确定您如何想象 Function App 如何在没有任何凭证的情况下获得 token 。
你的第二部分
... The idea was that the Azure function pushes the status information into the backplane topic. But sadly SignalR uses an unknown encoding. So this workaround is not possible.
使用 ServiceBus 作为 signalR 的背板,您的方向是正确的。但是,这样做的目的是帮助同步横向扩展部署(通常是云的全部内容)上的所有 signalR 集线器,而不是让您的客户端将消息推送到集线器。这些是仅由 signalR 集线器使用的系统消息,以确保每个人都知道一切。当走向云和规模化时 - 无论如何你都需要背板。
关于azure - Azure Function 如何针对 SignalR 进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39599924/
我正在使用SQL Server 2008 R2,并且想创建一个触发器。 对于每个添加(仅添加),将像这样更新一列: ABC-CurrentYear-AutoIncrementCode 例子: ABC-
是否可以在显示最终一致性的数据存储中创建/存储用户帐户? 似乎不可能在没有一堆架构复杂性的情况下管理帐户创建,以避免可能发生具有相同 UID(例如电子邮件地址)的两个帐户的情况? 最终一致性存储的用户
您好, 我有一个带有 Identity 的 .NetCore MVC APP并使用 this指导我能够创建自定义用户验证器。 public class UserDomainValidator : IU
这与以下问题相同:HiLo or identity? 我们以本站的数据库为例。 假设该站点具有以下表格: 帖子。 投票。 注释。 使用它的最佳策略是什么: 身份 - 这是更常见的。 或者 HiLo -
我想将 Blazor Server 与 ASP.NET Identity 一起使用。但我需要使用 PostgreSQL 作为用户/角色存储,因为它在 AWS 中。 它不使用 EF,这是我需要的。 我创
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我使用 ASP.NET 身份和 ClaimsIdentity 来验证我的用户。当用户通过身份验证时,属性 User.Identity 包含一个 ClaimsIdentity 实例。 但是,在登录请求期
所以我在两台机器上都安装了 CYGWIN。 如果我这样做,它会起作用: ssh -i desktop_rsa root@remoteserver 这需要我输入密码 ssh root@remoteser
我尝试在 mac osx 上的终端中通过 telnet 连接到 TOR 并请求新身份,但它不起作用,我总是收到此错误消息: Trying 127.0.0.1... telnet: connect to
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我正在开发一项服务,客户可以在其中注册他们的 webhook URL,我将发送有关已注册 URL 的更新。为了安全起见,我想让客户端(接收方)识别是我(服务器)向他们发送请求。 Facebook和 G
在 Haskell 中,有没有办法测试两个 IORef 是否相同?我正在寻找这样的东西: IORef a -> IORef a -> IO Bool 例如,如果您想可视化由 IORef 组成的图形,这
我是 .NET、MVC 和身份框架的新手。我注意到身份框架允许通过注释保护单个 Controller 操作。 [Authorize] public ActionResult Edit(int? Id)
我有一列具有身份的列,其计数为19546542,我想在删除所有数据后将其重置。我需要类似ms sql中的'dbcc checkident'这样的内容,但在Oracle中 最佳答案 在Oracle 12
这是我用来创建 session 以发送电子邮件的代码: props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enabl
我想了解 [AllowAnonymous] 标签的工作原理。 我有以下方法 [HttpGet] public ActionResult Add() { return View(); } 当我没
在使用沙盒测试环境时,PayPal 身份 token 对某些人显示而不对其他人显示的原因是否有任何原因。 我在英国使用 API,终生无法生成或找到 token 。 我已经遵循协议(protocol)并
我对非常简单的事情有一些疑问:IDENTITY。我尝试在 phpMyAdmin 中创建表: CREATE TABLE IF NOT EXISTS typEventu ( typEventu
习语 #1 和 #5 是 FinnAPL Idiom Library两者具有相同的名称:“Progressive index of (without replacement)”: ((⍴X)⍴⍋⍋X⍳
当我第一次在 TFS 中设置时,我的公司拼错了我的用户名。此后他们将其更改为正确的拼写,但该更改显然未反射(reflect)在 TFS 中。当我尝试 checkin 更改时,出现此错误: 有没有一种方
我是一名优秀的程序员,十分优秀!