2016-04-05 4 views
0

他のクライアントがSignalRを使用して認証したことをクライアントにWeb Apiに通知することを検討しています。私はSignalRの基本を理解していますが、APIリクエストで動作するようにHubを変更する方法については混乱しています。SignalRとWeb Api - Hubクラスを変更する方法

クライアントはjQueryを使用してWeb APIを呼び出すシングルページアプリケーションです。クライアントは、APIエンドポイントのいずれかを使用する前に、まずAPIで認証します。

また、Web Apiと同じプロジェクトでOAuthを使用して認証しています。

+1

まあ、クライアントが認証した後、サーバーに通知することもできます。サーバーは、他のすべてのクライアントにメッセージをブロードキャストすることができます(例えば、シグナルチャットのように) – alessalessio

+0

@alessalessio - これは私が探しているものと同じです。 SignalRコールをWeb APIの認証に追加するにはどうすればよいですか? jQuery呼び出しを認証するHTMLページには、SignalRチャットのようなSignalRスクリプトが含まれていなければなりませんか?サンプルコードがありますか? – webworm

+0

クライアントがどのように認証されているかは不明ですが、Web APIと同じプロジェクトでOAuthを使用して認証されていますか? Microsoft.Owin.Security.OAuthを使用していますか? –

答えて

1

ここで最も簡単な方法は、oauth認証フラックス内のsignalRハブへの参照を取得し、この方法が正常に完了した後にグローバルシグナリングを起動することです。Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)。例えば

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
    { 
     // auth and other stuffs removed for brevity 
     // ... 
     // ... 
     context.Validated(ticket); 

     // then here 
     var hub = GlobalHost.ConnectionManager.GetHubContext<IMessageHub>("MessageHub"); 
     hub.Clients.All.ServerMessage(new {message = $"{context.UserName} is here!"}); 

    } 

このようなメッセージハブ付き:

public interface IMessageHub 
{ 
    void ServerMessage(object eventObject); 
} 

[HubName("MessageHub"), Authorize] 
public class MessageHub : Hub<IMessageHub> 
{ 
    public MessageHub() 
    { 

    } 
} 

はそれが役に立てば幸い:)

関連する問題