亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

驗證信號集線器連接

驗證信號集線器連接

C#
慕仙森 2023-06-25 13:49:53
****我使用.Net框架,而不是Core****我有一個連接到服務器并訂閱某些集線器功能的網絡界面。我正在嘗試找到一種方法來限制對服務器的訂閱,因此只有具有正確令牌的客戶端才能連接和訂閱。這是我的服務器端:Startup.cs:public class Startup    {        public void Configuration(IAppBuilder app)        {            app.Map("/signalr", map =>            {                map.UseCors(CorsOptions.AllowAll);                var hubConfiguration = new HubConfiguration                {                    EnableDetailedErrors = true                };                map.RunSignalR(hubConfiguration);            });        }    }我的中心課程:[HubName("CordioHub")]    public class CordioHub : Hub    {        private static IHubContext CordioHubContext        {            get            {                return GlobalHost.ConnectionManager.GetHubContext<CordioHub>();            }        }        public static void UpdateClient(string message)        {            CordioHubContext.Clients.All.UpdateClient(message);        }        public override Task OnDisconnected(bool stopCalled)        {            return Clients.All.leave(Context.ConnectionId, DateTime.Now.ToString());        }        public override Task OnConnected()        {            return Clients.All.joined(Context.ConnectionId, DateTime.Now.ToString());        }        public override Task OnReconnected()        {            return Clients.All.rejoined(Context.ConnectionId, DateTime.Now.ToString());        }        //Status page events:        public static void UpdatePatientCout(int delta)        {            CordioHubContext.Clients.All.UpdatePatientCout(delta);        }    }正如我所解釋的,當客戶端嘗試建立第一次連接時,我想在服務器端檢查令牌,并在令牌不好的情況下拒絕。多謝!
查看完整描述

2 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

如果您使用自己的自定義令牌,您可以這樣做:


客戶端(.NET,但我想你會理解的):


var connection = new HubConnection("url", "CustomToken=SomeToken");

connection.Start().Wait();

服務器:


    public override Task OnConnected()

    {

        if(Context.QueryString["CustomToken"] != "CorrectToken")

        {

            ///Forcefully close the connection

            HttpContext.Current.Response.Close();

        }

        return base.OnConnected();

    }


查看完整回答
反對 回復 2023-06-25
?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

在這種情況下,您可以使用 JWT 令牌。配置非常簡單:


您Program.cs應該配置 JWT:


JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();


        services

            .AddAuthentication(options =>

            {

                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;

                options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;

                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

            })

            .AddJwtBearer(cfg =>

            {

                cfg.RequireHttpsMetadata = false;

                cfg.SaveToken = true;

                cfg.TokenValidationParameters = new TokenValidationParameters

                {

                    ValidIssuer = configuration["Jwt:Issuer"],

                    ValidAudience = configuration["Jwt:Issuer"],

                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["Jwt:Key"])),

                    ClockSkew = TimeSpan.Zero

                };

                cfg.Events = new JwtBearerEvents

                {

                    OnMessageReceived = context =>

                    {

                        if (context.Request.Query.TryGetValue("token", out var token)

                        )

                            context.Token = token;


                        return Task.CompletedTask;

                    }

                };

            });

配置文件:


 "Jwt": {

    "Key": "someKey",

    "Issuer": "http://yourdomain.com",

    "ExpireDays": 0,

    "ExpireHours": 1,

    "ExpireMinutes": 0

},

在 Angular 中,您應該創建攔截器,它將向每個請求添加 Authentications 標頭:


@Injectable()

export class JwtInterceptor implements HttpInterceptor {

    constructor(private userContext: UserContext) { }


intercept(

    request: HttpRequest<any>,

    next: HttpHandler

): Observable<HttpEvent<any>> {

    const authToken = this.userContext.getToken();

    if (!!authToken) {

        request = request.clone({

            setHeaders: {

                Authorization: `Bearer ${authToken}`

            }

        });

    }


    return next.handle(request);

    }

}


查看完整回答
反對 回復 2023-06-25
  • 2 回答
  • 0 關注
  • 173 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號