バックグラウンド
同じドメインで 2 つの Web サイトを持っています。一方の Web サイトはログイン/アカウント管理機能のみをカプセル化し、もう一方の Web サイトは実際の Web サイトです。
- LoginWeb - Login Page/css/images/javascript フォルダーのみが匿名アクセスを許可
- AdminWebsite - フォーム認証によって完全にロックダウンされています。つまり、javascript/images/css フォルダーでさえありません
<authorization><allow users=*>
私
が達成しようとしていること これは私が達成しようとしているワークフローであり、その 99% を達成しています。
- ユーザーがAdminWebsiteのいずれかのページにアクセスすると、 FormsAuthenticationによって LoginWebに戻されます。
- ユーザーは loginpage で資格情報を提供し、LoginWeb Web サイトはフォーム認証チケットを発行します。ユーザーはまだAdminWebSiteにログインしていません。(この方法で、ユーザーはパスワード変更ページなどに移動し、アカウント管理機能を実行できます)
- ユーザーは LoginWeb でさらに 2 つのステップに進み、AdminWebsite のFormsAuthチケットを発行してリダイレクトできるようになりました。
99%
はすでに機能しています これは、AdminWeb の FormsAuth チケットを発行しようとする LoginWeb のコードですが、機能していません。つまり、AdminWeb はまだログインにリダイレクトしています。私が見逃している非常に些細なことがあると確信していますが、それが正確に何であるかわかりません?????????
public void SetAuthenticationTicket(string username)
{
MachineKeySection sec=(MachineKeySection)WebConfigurationManager.OpenWebConfiguration("").SectionGroups["system.web"].Sections["machineKey"];
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
username,
DateTime.Now,
DateTime.Now.AddMinutes(30),
false, //true or false
sec.DecryptionKey, //Custom data like your webkey can go here
FormsAuthentication.FormsCookiePath);
var encryptedTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie("ADMINWEB", encryptedTicket)
{
Path = FormsAuthentication.FormsCookiePath,
Domain = "xxx.com"
};
Response.AppendCookie(cookie);
}
これらはフォーム認証の私の web.config セクションです:
LoginWeb
<machineKey validationKey="XXXXXX" decryptionKey="XXX" validation="SHA1"/>
<authentication mode="Forms">
<forms name="LoginWeb"
domain="xxx.com"
loginUrl="~/account/Logon"
timeout="1440"
cookieless="UseCookies"
slidingExpiration="false"
protection="All"
path="/"/>
</authentication>
管理者ウェブサイト
<machineKey validationKey="XXXXXX" decryptionKey="XXX" validation="SHA1"/>
<authentication mode="Forms">
<forms name="ADMINWEB"
domain="xxx.com"
loginUrl="http://loginweb/account/Logon"
timeout="1440"
cookieless="UseCookies"
slidingExpiration="false"
protection="All"
path="/"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>