サービス機能のプラグインの代わりにサービス機能がありますか?いくつかのシナリオでは、サービスの実装で承認されたセッションに一致するCookieを使用できません。要求のhttpヘッダーのトークンを使用してセッションを解決する可能性はありますか?ブラウザがクッキーをブロックしている場合に、そのための推奨ソリューションは何ですか?クッキーベースのセッション/認証に代わるもの
答えて
私は、組み込みの認証プロバイダとセッションプロバイダなしでServiceStackを使用しています。
属性をリクエストフィルタとして使用して、Cookie、リクエストヘッダー、または文字列パラメータからユーザー情報(IDとトークン)を収集します。 この情報は、ユーザーがログインした後に入力できます。レスポンスに新しいクッキーを追加し、ビューのレンダリング時にクライアントサイドにIDとトークン情報を注入すると、httpヘッダーとリンクのクエリパラメータに使用できます。
public class AuthenticationAttribute : Attribute, IHasRequestFilter
{
public void RequestFilter(IHttpRequest request, IHttpResponse response, object dto)
{
var userAuth = new UserAuth { };
if(!string.IsNullOrWhiteSpace(request.GetCookieValue("auth"))
{
userAuth = (UserAuth)request.GetCookieValue("auth");
}
else if (!string.IsNullOrEmpty(request.Headers.Get("auth-key")) &&
!string.IsNullOrEmpty(request.Headers.Get("auth-id")))
{
userAuth.Id = request.Headers.Get("id");
userAuth.Token = request.Headers.Get("token");
}
authenticationService.Authenticate(userAuth.Id, userAuth.token);
}
public IHasRequestFilter Copy()
{
return new AuthenticationAttribute();
}
public int Priority { get { return -3; } } // negative are executed before global requests
}
ユーザーが権限を与えられていない場合、私はこの時点で彼をリダイレクトします。
私のプロジェクトはSPAをサポートしています。ユーザーがxmlhttprequestsでAPIを使用する場合、認証の処理はヘッダーで行われます。その情報がAngularJSに読み込まれ、ページが読み込まれ、すべてのリクエスト(部分的なビュー、API消費など)で再利用されます。 ServiceStackはこのタイプのものには強力です。AngularJSアプリケーションとServiceStackビューエンジンを簡単に設定して、すべての要求を検証したり、アプリケーションをグローバル化したりすることができます。
リクエストがjavascriptによって呼び出されない場合、IDとトークンをクエリパラメータとして渡すリンクを常に生成し、フォーム上の隠れた入力にそれらを渡すと、Cookieなしで認証をサポートできます。
@Guilherme Cardoso:現在のソリューションでは、PreRequestFiltersと組み込みのセッション機能を使用しています。
マイワークフロー/回避策は以下の通りです:
ユーザーが、私はクッキーを取り、HTTPヘッダを使用して、クライアントに送信し、許可を取得します。クッキーがリクエストのhttpヘッダー(Authorization)に設定されている場合、クライアントはサービスを呼び出すことができます。
これを達成するために、PreRequestFilterを使用して、偽装された認証ヘッダーをリクエストのCookieにリダイレクトします。セッション機能を使用できるようになりました。ハックのように感じているが、このための瞬間;-)
public class CookieRestoreFromAuthorizationHeaderPlugin : IPlugin
{
public void Register(IAppHost appHost)
{
appHost.PreRequestFilters.Add((req, res) =>
{
var cookieValue = req.GetCookieValue("ss-id");
if(!string.IsNullOrEmpty(cookieValue))
return;
var authorizationHeader = req.Headers.Get("Authorization");
if (!string.IsNullOrEmpty(authorizationHeader) && authorizationHeader.ToLower().StartsWith("basictoken "))
{
var cookie = Encoding.UTF8.GetString(Convert.FromBase64String(authorizationHeader.Split(' ').Last()));
req.Cookies.Add("ss-id",new Cookie("ss-id",cookie));
req.Items.Add("ss-id",cookie);
}
});
}
}
- 1. C#クッキーベースの認証
- 2. クッキーベースのセッションのセキュリティ
- 3. セッション認証にwgetの代わりにurllibを使用
- 4. 認証のためにClientLoginに代わるもの
- 5. Openfiler - ローカル認証の代わりにLDAP認証を使うメリット
- 6. ポップアップの代わりにリダイレクトによる認証ページ内の認証
- 7. viewsの代わりにセッション
- 8. PHPセッション変数に代わるものは何ですか?
- 9. 認証トークン - セッション認証
- 10. Pythonのセッション認証
- 11. SwaggerHubに代わるもの
- 12. JqueryUIに代わるもの?
- 13. ツリービューに代わるもの
- 14. pplに代わるもの
- 15. QGLViewerに代わるもの
- 16. setAttributeに代わるもの
- 17. Chromeのポップアップの代わりにFacebook認証の公開タブ59
- 18. Socket.IOセッション認証
- 19. セッション/認証ループ
- 20. スチーム認証セッション
- 21. node-http-proxy経由のクッキーベースのセッションを維持する
- 22. facebook iframe - ポップアップ認証の代わりにFacebookのロゴを取得
- 23. セッション変数の代わりに
- 24. リダイレクトの代わりに認証後にJavascriptを実行
- 25. なぜユーザー認証のためにセッションの代わりにゴリラ/コンテキストを使用しますか?
- 26. 角JS(クッキーベースの認証)でjira APIを認証することができません
- 27. dropboxと統合する認証としてトークンの代わりにセッションIDを使用http api
- 28. Asana API:認証にAPIキーを使用する代わりに?
- 29. ログインページにリダイレクトする代わりにWeb API認証を返す
- 30. WSO2 API Manager OAuthの代わりに基本認証
おかげで動作し、これは、私の認証呼び出しで返されたセッションIDを取ることを可能にするために角度Ajaxを介して、私のCORSの実装の最後の作品/でした対応するAjax呼び出しでカスタムヘッダーとして追加し、標準のCookieが必要なときにヘッダーを取るカスタム認証プロバイダーをサービススタックに作成する必要はありません。 –