6

Tôi đang tạo ứng dụng ASP.NET 5 MVC 6 sẽ chỉ sử dụng xác thực Facebook/Google. Tôi cũng đang cố gắng sử dụng phần mềm trung gian cookie mà không có toàn bộ ASP.NET Identity - sau bài viết này: https://docs.asp.net/en/latest/security/authentication/cookie.htmlTùy chọn 'SignInScheme' phải được cung cấp

Vì vậy, tôi bắt đầu với một ứng dụng trống không có xác thực, sau đó thêm Microsoft.AspNet.Authentication.Cookies và Microsoft.AspNet.Authentication.Facebook NuGet gói để có một cách tiếp cận rất tối giản mà tôi không bao gồm bất cứ điều gì mà tôi không cần.

Tôi đã thêm mã sau vào Cấu hình trong Startup.cs nhưng tôi nhận được lỗi "Tùy chọn SignInScheme phải được cung cấp". Bất kỳ ý tưởng những gì tôi đang mất tích?

app.UseCookieAuthentication(options => 
      { 
       options.AuthenticationScheme = "MyCookieMiddlewareInstance"; 
       options.LoginPath = new PathString("/Accounts/Login/"); 
       options.AccessDeniedPath = new PathString("/Error/Unauthorized/"); 
       options.AutomaticAuthenticate = true; 
       options.AutomaticChallenge = true; 
      }); 

      app.UseFacebookAuthentication(options => 
      { 
       options.AppId = "myFacebookAppIdGoesHere"; 
       options.AppSecret = "myFacebookAppSecretGoesHere"; 
      }); 

Trả lời

8

Như chỉ định bởi các thông báo lỗi bạn nhìn thấy, bạn cần phải thiết lập options.SignInScheme trong các tùy chọn middleware Facebook của bạn:

app.UseFacebookAuthentication(options => { 
    options.AppId = "myFacebookAppIdGoesHere"; 
    options.AppSecret = "myFacebookAppSecretGoesHere"; 

    // This value must correspond to the instance of the cookie 
    // middleware used to create the authentication cookie. 
    options.SignInScheme = "MyCookieMiddlewareInstance"; 
}); 

Ngoài ra, bạn cũng có thể đặt nó trên toàn cầu từ ConfigureServices (nó sẽ cấu hình mọi phần mềm trung gian xác thực để bạn không phải đặt options.SignInScheme):

public void ConfigureServices(IServiceCollection services) { 
    services.AddAuthentication(options => { 
     // This value must correspond to the instance of the cookie 
     // middleware used to create the authentication cookie. 
     options.SignInScheme = "MyCookieMiddlewareInstance"; 
    }); 
} 
+0

Cảm ơn bạn. Một câu hỏi tiếp theo: là "MyCookieMIddlewareInstance" tên của cookie của tôi? Tôi sẽ phải tạo một cookie tạm thời để người dùng đăng ký sau khi được Facebook/Google xác thực. Sau đó, tôi có sử dụng tên cookie khác không? Nếu vậy, tôi đặt tên cookie đó ở đâu? – Sam

+0

Không, 'AuthenticationScheme' không ảnh hưởng đến tên cookie, đó là một định danh nội bộ hoàn toàn. Để thay đổi tên cookie, bạn có thể sử dụng thuộc tính 'CookieName'. – Pinpoint

+0

Trong trường hợp bạn chưa thiết lập một AuthenticationScheme rõ ràng, nó là CookieAuthenticationDefaults.AuthenticationScheme – Kugel

Các vấn đề liên quan