我已經創建了一個允許進行外部身份驗證/註冊的MVC應用程序。它創建了所有必要的組件(Owin,EF,Regiter,Login,Logout),並且我能夠執行應用程序中的所有基本活動。WEB API - 使用不記名令牌進行身份驗證
現在,我想要將Web應用程序與將由我的移動應用程序使用的WEB API集成。我卡在web api調用中的身份驗證(使用從Web應用程序收到的不記名令牌)。
我看到了一些示例,可以在啓用OWIN中間件的情況下創建WEB API項目。但我不知道如何集中外部身份驗證過程,並使用令牌爲我的Web應用程序和移動應用程序 和我不想去角度或單頁應用程序。 任何人都可以建議我正確的技術路徑來解決這個問題。 謝謝。
第1步:
我創建在Visual Studio 2015年個人登錄一個MVC項目啓用。並配置了我在Google開發人員控制檯中配置所有內容的按鍵。我Startup.cs將下面的代碼
public void ConfigureAuth(IAppBuilder app)
{
// Configure the db context, user manager and signin manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
// Enable the application to use a cookie to store information for the signed in user
// and to use a cookie to temporarily store information about a user logging in with a third party login provider
// Configure the sign in cookie
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
第2步:
改變了webconfig文件指向我的本地數據庫和運行應用程序,我能夠順利通過谷歌與登錄我的Gmail帳戶和用戶詳細信息添加到ASPUSerTables在DB成功
第3步:
現在我想創建一個WEB API項目,該項目將連接到數據庫並將一些數據返回到MVC Web應用程序和移動應用程序(我在此處停留在身份驗證部分)。我需要使用第三方認證來我的移動應用程序太(Xamarin),並使用共同的API從我的移動應用程序和MVC網站
步驟4 所以我想取而代之的Web應用程序(步驟1),我應創建瞭如下所示的WEB API項目,以返回Startup.cs中的身份驗證令牌,並將該cookie存儲在網站中以傳入後續請求。
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
// Configure the application for OAuth based flow
PublicClientId = "self";
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true
};
我不想去與棱角分明,我需要我的WebApplication(MVC)和Web API項目的正常進行身份驗證的所有請求。請告訴我 正確的道路。 感謝
你在哪裏卡住與不記名令牌認證?什麼是你得到的錯誤將有助於回答你的問題。我已經完成了移動和Web使用相同的API沒有任何問題的項目。 –
嗨Jawand。感謝您的即時回覆。在我的MVC項目中,我可以從我的AccountController中獲取谷歌的用戶聲明,並能夠在ASPUsers表中註冊詳細信息。我創建了獨立的web api項目,沒有owin組件(是否正確),需要從web應用程序授權。我不知道如何獲取Web應用程序Cookie中的訪問令牌並授權REST調用。請指導我創建簡單的MVC客戶端應用程序(而非angular)和web api項目的步驟,以支持Web和移動應用程序中的外部身份驗證。 – DevExpress
@DevOne你可以在問題中添加一些代碼嗎? –