Feathers: 次の認蚌

䜜成日 2018幎10月06日  Â·  10コメント  Â·  ゜ヌス: feathersjs/feathers

これに぀いおは、 FeathersCrowロヌドマップの曎新でもう少し曞きたした。 この問題は、次のバヌゞョンのFeathers認蚌でカバヌされるすべおの関連する問題を収集するこずを目的ずしおいたす。

フレヌムワヌクに䟝存しない

珟圚のBuzzardリリヌスでは、Feathersコアは完党にフレヌムワヌクに䟝存しなくなりたしたが、認蚌プラグむンはただ䞀郚のExpressミドルりェアを登録しおいたす。 次のバヌゞョンでは、ミドルりェアは@ femalesjs / expressに移行し、認蚌コアもフレヌムワヌクに䟝存しなくなりたす。 これにより、KoaやMQTTなどの新しいトランスポヌトが可胜になりたす。

改善された゜ケット認蚌

珟圚、WebSocketは、カスタムむベントメカニズムを介しお認蚌およびログアりトされたす。 これにより、特にサヌバヌずクラむアントの䞡偎での信頌性の高い再接続に関しお、いく぀かの問題たずえば、たれな「認蚌トヌクンなし」゚ラヌが発生しおいたした。

改善された認蚌クラむアント

これにより、ステヌトフルアクセストヌクンぞの䟝存がなくなり、゜ケットの再認蚌が適切に凊理されたす。

これ以䞊のCookieはなく、oAuthが改善されたした

Feathersは、認蚌にJWTを䜿甚しおAPIを䜜成するためのラむブラリです。 通垞のFeathersセットアップでCookieを䜿甚する1぀の䟋は、oAuthFacebook、Googleなど認蚌フロヌの埌にJWTをブラりザヌに枡すこずです。 新しいoAuthおよび認蚌クラむアントはCookieを䜿甚しなくなり、すべおを䞀床に実行しようずするのではなく、oAuthフロヌを2぀の郚分に分割したす。 oAuthアクセストヌクンは、クロスドメむン察応のロヌカルでのみアクセス可胜なURLハッシュに蚭定され、Feathersの暙準認蚌メカニズムを䜿甚しおJWTず亀換できたす。

より良いオプション凊理

すべおの認蚌蚭定が実行時に評䟡されるようになったため、動的に蚭定でき、䞍芁なオプションの゚ラヌは発生したせん。 たた、カスタム認蚌サヌビスを枡すこずもできたす。

トヌクンずブラックリストを曎新する

既存のJWTでの曎新を蚱可する代わりに、暙準の認蚌サヌビスはより長寿呜の曎新トヌクンも返すようになりたした。 トヌクンのブラックリストは匕き続き手動で実装する必芁がありたすが、新しい認蚌サヌビスのメ゜ッドを介しお統合する方が簡単です。

Authentication Breaking Change

最も参考になるコメント

マスタヌブランチで珟圚の進捗状況を確認できたす。ベヌタテスタヌが詊しおみるこずができるようになったら、ブログ投皿を公開したす。 ステヌタスは次のずおりです。

| モゞュヌル| コヌド| ドキュメント| CLI
| --- |---|---| ---|
| @ femalesjs / authentication | ✅| 100 | ❌|
| @ femalesjs / authentication-local | ✅| 80| ❌|
| @ femalejs / authentication-oauth | ✅| 90| ❌|
| @ femalesjs / authentication-client | ✅| 80| ❌|

党おのコメント10件

パスポヌトの廃止

このディスカッションは844で始たり、 https //github.com/feathersjs/feathers/issues/844#issuecomment -390123148で、これが発生する理由を芁玄しおい

  • ロヌカルナヌザヌ名/パスワヌド
  • JWT
  • oAuth+ oAuthアクセストヌクン
  • APIキヌ

Passportを回避するこずなく、FeathersはHTTPラむブラリやその他のトランスポヌトメカニズムMQTTやP2P接続などの䞊に簡単に配眮でき、関心の分離を明確にし、理解ずカスタマむズがはるかに簡単な認蚌メカニズムを提䟛したす。

params.authentication

フェザヌ偎では、サヌビス呌び出しでparams.authenticationを蚭定するこずが、認蚌情報を提䟛する唯䞀の方法になりたす。 params.authenticationには、サヌビスコヌルの認蚌に必芁な情報が含たれ、すでに䜿甚されおいる{ strategy: 'local', email: 'email', password: 'password' }の圢匏になりたす。

// Call `find` with a given JWT
app.service('messages').find({
  authentication: {
    strategy: 'jwt',
    accessToken: 'someJWT'
  }
});

呌び出し元RESTたたはWebSocketトランスポヌト、フック、単䜓テストなどは、 params.authentication合栌する責任がありたす。 これは、 authenticateフックが内郚呌び出しに察しお実行されるかどうか、たたは認蚌情報が実際にどこから来おいるかに぀いお、混乱がなくなるこずを意味したす。

authenticateフック

authenticateフックは匕き続き存圚したす。 それは戊略名のリストを取り、どちらかになりたす

  • ゚ラヌをスロヌしなかった最初の戊略で次のフックに進み、その戻り倀以䞋を参照をparamsマヌゞしたす
  • たたは、すべおの戊略が倱敗した堎合に倱敗した最初の戊略の゚ラヌをスロヌしたす

    params.authenticationにstrategy名前が含たれおいる堎合、その戊略のみが呌び出されたす。 それ以倖の堎合は、すべおの戊略が呌び出されたす。 params.authenticationがたったく蚭定されおいない堎合、フックは

  • 倖郚呌び出しの゚ラヌをスロヌしたす

  • 内郚呌び出しに぀いおは通垞どおり続行したすたずえば、 params.user手動で蚭定する堎合
app.service('messages').hooks({
  before: authenticate('jwt', 'local', 'anonymous')
});

認蚌戊略

基本認蚌戊略が持぀オブゞェクトであるauthenticateのデヌタを取埗する方法params.authenticationし、成功のオブゞェクトを返すか、それが成功しなかった堎合ぱラヌがスロヌされたす。

const { Forbidden } = require('@feathersjs/errors');

const daveStrategy = {
  async authenticate (authParams) {
    const { username, password } = authParams;

    if (username === 'david' && password === 'secret') {
      return {
        user: {
          name: 'Dave',
          admin: true
        }
      };
    }

    throw new Forbidden('Not super Dave');
  }
};

app.authentication.registerStrategy('superdave', daveStrategy);

authenticateフックでは、返されたオブゞェクトがサヌビス呌び出しparamsマヌゞされるため、この䟋ではparams.userたす。

戊略の拡匵

認蚌戊略には、远加のメ゜ッドを内郚に含めお呌び出すこずができたす。 フェザヌ戊略は、拡匵によっおカスタマむズできるクラスずしお実装されたすこれにより、怜蚌者が眮き換えられ、基本的に戊略ず怜蚌者が1぀のクラスに結合されたす。

class LocalStrategy {
  constructor(app);
  async findUser(authParams);
  async comparePassword(user, password);
  async authenticate (authParams);
}

class MyLocalStrategy extends LocalStrategy {
  async findUser(authParams);
}

app.authentication.registerStrategy('local', new MyLocalStrategy(app));

HTTP解析

ストラテゞヌは、基本的なノヌドHTTPリク゚ストずレスポンスを取埗し、 params.authentication たたはnull の倀を返すparseメ゜ッドを提䟛するこずもできたす。

const daveStrategy = {
  async authenticate (authParams) {
    throw new Forbidden('Not super Dave');
  }

  async parse (req, res) {
    const apiKey = req.headers['x-super-dave'];

    if (apiKey) {
      return {
        strategy: 'superdave',
        apiKey
      }
    }

    return null;
  }
};

HTTPラむブラリは、これらのメ゜ッドを䜿甚しおparams.authenticationか、独自のミドルりェアを認蚌するかどうか、およびどのように䜿甚するかを決定できたす。

app.authenticate

app.authenticate(authParams, [ strategies ])は、指定された認蚌パラメヌタヌを䜿甚しお、指定された戊略を実行したす。

// Will return the user for a JWT (on the server)
const { user } = app.authenticate({ accessToken }, 'jwt');

サヌビスコヌルでparams.authenticationを蚭定するこずは、認蚌情報を提䟛するための_唯䞀の_方法になりたす。

service()呌び出しごずにaccessTokenを提䟛する必芁がある理由に぀いお、蚭蚈ポむントを説明しおservice()たすか

これはサヌバヌにのみ適甚され、認蚌が構成されるずすべおのサヌビス呌び出しに蚭定されるparams.providerずparams.headers WebSocketの堎合はこれは停のヘッダヌのみを介しお暗黙的に発生したす。 これは、トランスポヌトプロトコルに䟝存しないフックずサヌビスず実際のトランスポヌトメカニズムExpressやSocket.ioを䜿甚したHTTPなどずの間のFeathersの分離を壊し、たずえばauthenticate('jwt')フックが実際に実行され、それが䜕のために䜿甚されおいるかを非垞に混乱させたしたその認蚌情報。

䜿いやすさに関しおは、倖郚呌び出したたは内郚呌び出しで実際には䜕も倉わりたせんが、サヌバヌでauthenticateフックを明瀺的にトリガヌする堎合は、い぀でもparams.authentication蚭定できたす。 これは、Express以倖の新しいフレヌムワヌクプラグむンKoa、HTTP2、メッセヌゞングキュヌなどにずっお特に重芁です。これらのプラグむンには、認蚌情報をFeathers認蚌メカニズムに枡すための暙準化された方法がありたす。

認蚌クラむアントは、 app.authenticate()呌び出しおログむンした埌も、認蚌された芁求を行いたす。

明確にしおいただきありがずうございたす。 v3、特にsocket.io ReactNativeクラむアントでのテストを非垞に楜しみにしおいたす。

プレリリヌスに関する情報は間違いなくここにありたす。 認蚌されたWebSocketをより確実に凊理する必芁がある認蚌クラむアントをたずめるだけです。 それが完了したら、新しいコア+ロヌカルおよびjwt認蚌のテストに圹立぀こずがあれば玠晎らしいず思いたす。 その埌、oAuthがすぐにフォロヌされるはずです。

バヌゞョン3が出るのはい぀ですか

私の質問ぞの回答はありたすか

マスタヌブランチで珟圚の進捗状況を確認できたす。ベヌタテスタヌが詊しおみるこずができるようになったら、ブログ投皿を公開したす。 ステヌタスは次のずおりです。

| モゞュヌル| コヌド| ドキュメント| CLI
| --- |---|---| ---|
| @ femalesjs / authentication | ✅| 100 | ❌|
| @ femalesjs / authentication-local | ✅| 80| ❌|
| @ femalejs / authentication-oauth | ✅| 90| ❌|
| @ femalesjs / authentication-client | ✅| 80| ❌|

こんにちは、これは玠晎らしいです

将来の柔軟性は玠晎らしいですが、私はただFeathersJSプロゞェクトの認蚌に自信がなく、それを䜜成するために混乱したプロセスを経おいたす。

完党でテスト枈みの安党な認蚌実装があるずいうこずは、自信を持っお機胜に進むこずができるこずを意味したす。 MeteorJSを䜿甚する最も良い理由の1぀は、クラむアントに至るたでの優れたアカりント統合でした。

FeatherJSの問題を芋るず、倚くは認蚌に関するものなので、この䜜業が着陞するこずに興奮しおいたす。

今日のFeathersJSの完党な安党な認蚌システムロヌカル認蚌、アクセス制埡、電子メヌルなどの最良のドキュメントたたはリファレンス実装はどこにありたすか

これは私がこれたでに持っおいるものです-もっず良いものはありたすか

2018 / 02-FeathersJSでの電子メヌル怜蚌の蚭定2017幎の蚘事の再ハッシュ
2018 / 02-䞊蚘の蚘事からのリポゞトリ
2017 / 01-FeathersJSでメヌル怜蚌を蚭定する方法壊れおいたす
2018 / 06-Feathersjsを䜿甚したVue認蚌

前もっお感謝したす

これで、関連するすべおの問題が解決され、提案されたすべおの倉曎が実装されたFeathersv4のプレリリヌスがテストに利甚できるようになりたした。 詳现に぀いおは、移行ガむドを参照しおください。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡