IIS でアプリケーション リクエスト ルーティング (ARR) を使用して、一連のパスを Node.js Web サイトに渡そうとしています。私の問題は、どちらの側でも認証チケットを取得/設定できることです。
C# と Node.js ですぐに使用でき、両方で同じ結果が得られる暗号化/復号化ペアの簡単な例が本当に必要です。私は今後数日間、時間が許す限りこの問題に取り組んでいきますが、私の前に誰も答えが出ない場合は答えるつもりです.
私の意図は、ノード側を Node.js 側の connect/express モジュールとして作成することです。私はすでに ASP.Net ソリューションでカスタム認証を行っており、現在の方法を両方のプラットフォームから安全なものに簡単に置き換えることができます (同じキーを共有している限り)。
認証 Cookie を作成する現在のコードAccountController.cs
private void ProcessUserLogin(MyEntityModel db, SiteUser user, bool remember=false)
{
var roles = String.Join("|", value:user.SiteRoles.Select(sr => sr.Name.ToLowerInvariant().Trim()).Distinct().ToArray());
//update the laston record(s)
user.UserAgent = Request.UserAgent;
user.LastOn = DateTimeOffset.UtcNow;
db.SaveChanges();
// Create and tuck away the cookie
var authTicket = new FormsAuthenticationTicket(
1
,user.Username
,DateTime.Now
,DateTime.Now.AddDays(31) //max 31 days
,remember
,string.IsNullOrWhiteSpace(roles) ? "guest" : roles
);
var ticket = FormsAuthentication.Encrypt(authTicket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticket);
if (remember) cookie.Expires = DateTime.Now.AddDays(8);
Response.Cookies.Add(cookie);
}
認証 Cookie を読み取る現在のコードGlobal.asax.cs
void Application_AuthenticateRequest(object sender, EventArgs args)
{
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null) return;
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = authTicket.UserData.Split(new Char[] { '|' });
//create new generic identity, and corresponding principal...
var g = new GenericIdentity(authTicket.Name);
var up = new GenericPrincipal(g, roles);
//set principal for current request & thread (app will handle transitions from here)
Thread.CurrentPrincipal = Context.User = up;
}
の関連部分Web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<membership>
<providers>
<!-- Remove default provider(s), so custom override works -->
<clear />
</providers>
</membership>
</system.web>
</configuration>