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();
}

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);
}
}
- 2 回答
- 0 關注
- 173 瀏覽
添加回答
舉報