2016-05-10 5 views
2

私はsignalRを使用しており、[Authorize]属性が機能するようにしようとしています。セットアップ以下で、私は401不正な..承認ヘッダーシグナルを使用して不正アクセスする

を取得し、私はハブを開始する直前に、私はこのように認証を設定します。

:私はヘッダが以下のような要求で送信されていることがわかります

$.signalR.ajaxDefaults.headers = { Authorization: 'Bearer ' + settingsService.getItem('authData').token } 

許可:ベアラF0wGNa7cAwUjOFI27TDR_w7N4Ncmz66PGpsU1AH2AWt0Gdt39e2o4DGwPsBXTAlIwHrAF-YHE9I1KGLxfabE0QxpcY5mLn1gxGWStOSX_W5NaUQlRlpRu5k-s6YLH-vVjlakqap_YXbzPelZJOjwcz7Ea5VHcCUFQ5xDYYK0VJXDIqMwQXZPIyVtNVu1RyLLVj7iOZaMd-41gHKWNqFWJBmK5WkWw06dI4AWiifWJT_8v1WrFPCAzYfiT0U

マイハブ:

[Authorize] 
[HubName("myHub")] 
public class DataHub : Hub { 
    private static bool _isInitated; 

    public DataHub() { 
     //Do stuff 
     } 
    } 
} 

トークンは次のように作成されます。

var identity = new ClaimsIdentity(OAuthDefaults.AuthenticationType); 
     identity.AddClaim(new Claim("Username", "myname")); 

     var properties = new AuthenticationProperties() { 
      IssuedUtc = DateTime.UtcNow, 
      ExpiresUtc = DateTime.UtcNow.Add(Startup.OAuthOptions.AccessTokenExpireTimeSpan) 
     }; 

     var ticket = new AuthenticationTicket(identity, properties); 
     var accessToken = Startup.OAuthOptions.AccessTokenFormat.Protect(ticket); 

     var response = new JObject(new JProperty("access_token", accessToken), new JProperty("expires_in", Startup.OAuthOptions.AccessTokenExpireTimeSpan.TotalMinutes)); 

     return Ok(new { token = response }); 

私はここで特別な何かが足りないのですか?本当にそれを取得しないでください。

答えて

2

これは他の人にとって問題であれば、私はここで答えを得ました。私のstartup.csでは、最後にConfigurationメソッドでapp.MapSignalR();を移動しなければならなかった。 ..私は最後ConfigureOAuth(app);を持っていた前

public class Startup { 
    public void Configuration(IAppBuilder app) { 
     CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; 
     GlobalHost.Configuration.DefaultMessageBufferSize = 100; 
     ConfigureOAuth(app); 
     app.MapSignalR(); 
    } 

    public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; } 

    public void ConfigureOAuth(IAppBuilder app) { 
     OAuthOptions = new OAuthAuthorizationServerOptions { 
      AllowInsecureHttp = true, 
      TokenEndpointPath = new PathString("/token"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(7) 
     }; 

     app.UseOAuthAuthorizationServer(OAuthOptions); 
     app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 
    } 
} 

し、それは

+0

はありがとうござい動作しませんでした:以下のように!私はこの問題を解決しようと何時間も探しました。これはまさに私が必要としたものでした。 – rooter

関連する問題