.net Web APIバックエンドを備えたAngularアプリで、非同期リクエストを介してフォーム認証を実装しようとしています。
これが私のweb.configの関連部分です...
<authentication mode="Forms">
<forms loginUrl="/" cookieless="UseCookies" name=".TIMETRACK" requireSSL="false" timeout="30" protection="All" path="/TimeTrack" />
</authentication>
これが私のWebAPIログイン方法です...
[Route("Login")]
public HttpResponseMessage Post(AppUser credentials)
{
var userTemplate = _authenticationProvider.GetUserByEmail(credentials.Email);
var user = Mapper.Map<ClientUser>(credentials);
if (userTemplate.HashCode == _cryptographyService.HashPassword(credentials.Password, userTemplate.Salt))
{
FormsAuthentication.SetAuthCookie(userTemplate.Email, false);
user.IsAuthenticated = true;
}
return Request.CreateResponse(HttpStatusCode.OK, user);
}
これが私のAngularControllerメソッドの呼び出しです...
$scope.authenticate = function () {
if (validateAuthentication()) {
$http.post('Authentication/Login', { Email: $scope.email, Password: $scope.password })
.then(loginSuccess, loginFailure);
}
};
ログイン後に返送されるフィドラーで応答を分析すると、これを見ることができます...
Set-Cookie: .TIMETRACK=4D69EB09BD2B5B1444FBF07D1AB5EEE86DDEFD237AF451EF38EF6FD78E56E24DBD01369DEC865F81297114FF354BF3BC5C6099C3C5D1D89C001014BE071B4CB5A3059E28DBC7D6B25EE27A6FE2A31E278106D78E8FE080F73A6C8BBD3B6B83F12FAE9CD1AEE80629AA72B1DD16E0606D92D0C74F8388A932930C15D89178F92A; path=/TimeTrack; HttpOnly
つまり、Cookieが作成されているようです。ただし、サーバーへの後続の要求では...
User.Identity.IsAuthenticated
常に偽です。また、Cookieがサーバーに送り返される兆候も見られません。
その認証Cookieをサーバーに戻すために特別なことをする必要がありますか?
その価値のために、私はこのプロジェクトをGitHubで公開しています。ここでそれを見ることができます... https://github.com/JosephEricDavis/TimeTrack
助けてくれてありがとう
そのため、web.configファイルのノードに誤ってpath属性を設定したことがわかりました。パス属性を削除すると、期待どおりに機能し始めました。
クッキーのパスが何であるかを知らない私のような人のために。このリソースが役に立ったと思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加