2016-11-25 137 views
1

我有一臺服務器,它使用ASP.NET Core Web ApiOpenIddict作爲授權框架。現在我添加了一個SignalR主機,並希望爲其添加授權。SignalR和OpenId連接

different sources我發現SignalR(JS客戶端)希望您在查詢字符串或cookie中發送訪問令牌,因爲websockets不支持標頭。

由於身份驗證中間件不檢查查詢字符串或cookie容器的授權條目,我需要實現這樣一個提供者/檢索器/解析器,它自己讀取這個值。

我找到了solution for IdentityServer但沒有任何關於OpenIddict

Where /如何使用OpenIddict實現這種令牌解析器?

+0

是[this](https://github.com/mikebridge/IdentityServer4SignalR)你想要做什麼?它具有[兩層中間件](https://github.com/mikebridge/IdentityServer4SignalR/blob/master/src/ChatAPI/Auth/JWTInitialization.cs#L80-L87)來接受查詢字符串和標題。 – mikebridge

回答

2

如果使用JwtBearerAuthentication那麼你可以使用OnMessageReceived設置令牌:

Events = new JwtBearerEvents() 
{ 
    OnMessageReceived = async (ctx) => 
    { 
     ctx.Token = ctx.Request.Query["<qs-name>"]; 
    } 
} 

或者,如果你使用IdentityServerAuthentication那麼你可以使用TokenRetriever(未經測試,但它應該是這樣的):

TokenRetriever = (ctx) => 
    { 
     return ctx.Request.Query["<qs-name>"]; 
    }