如何修改Microsoft.Azure.SignalR.Emulator的访问密钥?
Azure SignalR 模拟器自定义访问密钥设置方案
问题背景
全网未找到修改Azure SignalR模拟器默认访问密钥的相关信息,默认密钥为:ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGH,对应的连接字符串格式:
Endpoint=http://0.0.0.0;Port=8888;AccessKey=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGH;Version=1.0
尝试通过signalr-appsettings.json设置自定义密钥无效,查看源码发现密钥似乎被硬编码,且asrs-emulator帮助命令中没有设置自定义密钥的参数,需确认是否可以修改及正确设置方式。
现有配置文件
Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:8.0 # Create and switch to a non-root user RUN useradd -ms /bin/bash nonroot && \ mkdir -p /home/nonroot/signalr && \ chown -R nonroot:nonroot /home/nonroot USER nonroot WORKDIR /home/nonroot/signalr # Install the SignalR Emulator RUN dotnet tool install --global Microsoft.Azure.SignalR.Emulator # Update PATH to include user's dotnet tools ENV PATH="/home/nonroot/.dotnet/tools:${PATH}" # Start the emulator with the custom access key ENTRYPOINT ["asrs-emulator", "start", "-i", "0.0.0.0"]
Docker Compose 配置
signalr-emulator: container_name: signalr-emulator image: signalr-emulator:latest build: dockerfile: signalr/Dockerfile networks: - marble-network env_file: - .env.signalr volumes: - signalr:/home/nonroot/.aspnet - ./signalr/signalr-settings.json:/home/nonroot/signalr/settings.json - ./signalr/signalr-appsettings.json:/home/nonroot/signalr/appsettings.json ports: - "7071:7071" - "9999:8888"
signalr-appsettings.json
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Warning" } }, "AllowedHosts": "*", "AccessKey": "This key is not working but included in: https://github.com/Azure/azure-signalr/blob/dev/src/Microsoft.Azure.SignalR.Emulator/appsettings.json and the file is being read according to the logs when running 'asrs-emulator start -i 0.0.0.0' | I also looked at the source code of the said repo, and it seems that the Access Key is hardcoded??" }
signalr-settings.json
{ "UpstreamSettings": { "Templates": [ { "UrlTemplate": "http://0.0.0.0:7071/runtime/webhooks/signalr", "EventPattern": "*", "HubPattern": "*", "CategoryPattern": "*" } ] } }
结论与解决方案
Azure SignalR模拟器的访问密钥确实是硬编码的,官方目前没有提供修改默认密钥的参数或配置项。原因是模拟器仅面向本地开发测试场景设计,旨在简化调试流程,未考虑生产环境安全需求,因此固定了默认密钥。
若必须使用自定义密钥,可通过两种方式实现:
- 自定义编译模拟器:克隆Azure SignalR官方仓库,修改源码中硬编码的密钥值,重新编译并安装自定义版本的模拟器。
- 反向代理中转:在模拟器前端部署反向代理(如Nginx),由代理层验证自定义密钥后再转发请求到模拟器,无需修改模拟器源码即可实现密钥验证逻辑。
注意事项
- 模拟器仅适用于本地开发测试,禁止在生产环境使用。
- 若选择自定义编译,需关注官方仓库更新,避免后续版本兼容问题。
内容的提问来源于stack exchange,提问作者Gian Lorenzo Abaño
相关产品推荐
相关产品推荐

