我需要在我闪亮的新ASP.Net Core Web API + Angular2项目中使用由旧的VB.Net aspx项目创建的身份验证cookie。我对基于cookie的授权和身份验证非常陌生,我公司的任何人都不知道如何将他们所知道的内容翻译成我正在尝试做的事情。
几天的研究和修修让我走得很远: 现在我可以在需要的地方设置[Authorize]属性并阻止访问返回通常的401错误,但我的网站似乎没有认识到他的网站创建的cookie作为该锁的众所周知的密钥......
在 Startup.cs 中 - 我不会在“配置()”方法之外做任何事情,我应该这样做吗?
我正在将网站配置为使用Cookie身份验证,将方案设置为“Cookie”而不确切知道该做什么,并将“CookieName”设置为从该旧网站登录时创建的身份验证Cookie的名称。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// Stuff eliminated for brevity
// Set up pipeline
app.UseDefaultFiles();
app.UseStaticFiles();
//app.UseIdentity(); (Don't think I need this??)
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationScheme = "Cookies", //(Dont actually know what this does. Should I create my own middlewares? I mean what is this magic string "Cookies"? It's just from tutorials/examples...)
LoginPath = new PathString("/base_site/login.aspx"),
AccessDeniedPath = new PathString("/base_site/logon.aspx"), // Might want to create an error page...
CookieName = "companyName_AccessLevel", //This is what he had in <forms name="companyName_AccessLevel">
ReturnUrlParameter = "index.html", //What youd put in <forms defaultUrl="index.html">
AutomaticAuthenticate = true,
AutomaticChallenge = true
});
app.UseMvc();
}
坦率地说,与我的同事根据他的asp.net经验建议相比,这一切看起来都非常复杂:
“只需将其放入 web.config ”,他告诉我
<system.web>
<authentication mode="Forms">
<forms name="companyName_AccessLevel" loginUrl="/base_site/login.aspx" protection="All" timeout="60" defaultUrl="index.html"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
所以他当然不太热衷于与我一起研究这种“其他方式”。我可以以某种方式恢复到web.config吗?
答案 0 :(得分:1)
Cookie已加密,您必须使用类似的加密技术和共享密钥才能在2个不同的网站上读取Cookie。有一个Nuget包,允许您配置旧的asp.net 4.x站点以与核心站点共享cookie。这是它的官方文件。
答案 1 :(得分:0)
要跨应用程序配置表单身份验证,请进行设置 Web.config文件的窗体和machineKey部分的属性 参与的所有应用程序的值相同 共享表单身份验证。