私はWebフォームアプリケーションにIdentityServer3を使用していますので、MVC No Library Clientの次のローカルマシンでid_tokenの取得を再現できました。私の完全なソースはGitHubにIdServer3-WebFormsAppDemoとして掲載されています。「実動」サーバに設定されていないクッキー
しかし、実際のプロダクションサーバーに移動すると、アプリはクレームを設定できないようです。アプリが別のフォームにリダイレクトし、id_token特許請求の範囲を表示し、トークン検証、クッキー記号後
// AuthorizationCallback.aspx
private async Task ProcessRequest() {
var idToken = Request.Form["id_token"];
var state = Request.Form["state"];
if (idToken == null) {
throw new InvalidOperationException("invalid id_token");
}
var claims = await ValidateIdentityTokenAsync(idToken, state);
var claimsIdentity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
claimsIdentity.AddClaim(new Claim("id_token", idToken));
Request.GetOwinContext().Authentication.SignIn(claimsIdentity);
Response.Redirect("/");
}
:これは、(ユーザーが認証および同意を与えた直後)にクッキー記号を処理するコールバックである
私はトークンが AuthorizationCallback.aspxに正常に検証されており、Pからテスト時ローカルしかし全くテストないとき特許請求の範囲が表示されている Default.aspxのにリダイレクトする場合の請求項は、取得されていることを確認することができる// Default.aspx
protected void Page_Load (object sender, EventArgs e) {
heading.InnerText = Page.User.Identity.IsAuthenticated ? "User Is Authenticated" : "User Is Not Authenticated";
foreach (var claim in Request.GetOwinContext().Authentication.User.Claims) {
AddListElement(claim.Type, claim.Value);
}
}
ローワーサーバ。
Page.User.Identity.IsAuthenticatedは常に偽になり、そして何も保存されたクレームは、ユーザーオブジェクトはありません。私のブラウザから検査すると、私はレスポンスヘッダ上のこれらの2枚のクッキーを見ることができます:
set-cookie:.AspNet.TempCookie=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT
set-cookie:.AspNet.ApplicationCookie=fyMP9H ... Gt-7VlTA; path=/; secure; HttpOnly
しかし、本番サーバーでは、ローカルホストからアプリをテストするこれらのクッキーが存在しない場合のみです。この現象の原因は何ですか?どのような助けや手がかりをいただければ幸いです。