2016-12-07 6 views
0

私はnodejsを使用しています。 http:// {username}の形式で基本認証を使用するサードパーティがあります。基本認証は、ヘッダに渡された場合nodejsを使用し、expressとbasic authユーザー名とパスワードを取得するには

{password}@yourdomain.com/私は

var auth = require('basic-auth') 

app.use(function(req, res, next) { 
    var credentials = auth(req) 
    if (req.headers.authorization) { 
     console.log("found headers"); 
    } 
} 

しかし、これだけで作品を試してみました。

私はその後、提案され、使用のURL

として試み、ここで私がある

(この外部パーティは私のAPIを呼び出すことができる唯一の方法である)URLからユーザー名とパスワードを取得するように見えることはできません私は

http://myusername:[email protected]:4050/api/callback 


var express = require('express'); 
var http = require('http'); 
var url = require('url'); 

var app = express(); 

app.use(function(req, res, next) { 

    console.log("req.protocol=",req.protocol); 
    console.log("req.get('host')=",req.get('host')); 
    console.log("req.originalUrl=",req.originalUrl); 
} 

http.createServer(app).listen(config.port, function() { 
    console.log("HTTP BandWidth listening on port " + config.port); 

}); 

にPOSTを行うときに私のコンソールが

req.protocol = HTTP

ように見える今見ています

req.get( 'ホスト')= localhostを:4050

req.originalUrl =/API /コールバック、私は全体のreq OBJをダンプした場合、私はmyusernameと指定を参照するか、

をMYPASSWORDません

Iあなたはノードにビルトインurlパッケージを使用することができるはず

おかげ ランディ

答えて

0

何かを明らかに不足している必要があります。

https://nodejs.org/dist/latest-v6.x/docs/api/url.html#url_urlobject_auth

const url = require('url'); 

app.use(function(req, res, next) { 
    const urlObj = url.parse(req.protocol + '://' + req.get('host') + req.originalUrl); 
    console.log('Auth info: ' + urlObj.auth); 
} 

この情報がお役に立てば幸い!


EDIT:まあ、私はその裏を取ります。 URIでのユーザー名とパスワードの使用は廃止され、ブラウザはその情報を無視しているように見えます。 See RFC 3986

3.2.1。ユーザー情報

はのUserInfoサブコンポーネントは、ユーザー名とリソースにアクセスするための の承認を得る方法について、 、必要に応じて、スキーム固有の情報から構成されてもよいです。 が存在する場合、ユーザー情報には、ホストからの を区切る商用at-sign( "@")が続きます。フォーマットの

userinfo = *(unreserved/pct-encoded/sub-delims/":") 

使用:のUserInfoフィールドに "ユーザーパスワードは"
を廃止予定です。アプリケーションは、(「:」)最初のコロンの後にクリアテキストとして任意のデータ
をレンダリングするべきではないコロンの後にデータがない限りuserinfoを
サブコンポーネント内で見つかった文字は、空の文字列
(パスワードがないことを示す)です。 アプリケーションは無視することを選択することができるか、暗号化されていない形でそのようなデータの記憶を拒否すべきである参照
の一部として受信されたとき
は、そのようなデータを拒否します。
クリアテキストでの認証情報の受け渡しは、使用されたほとんどすべてのケースでセキュリティリスクが
であることが判明しています。

そして...

7.5。機密情報

URIプロデューサは、秘密であることが意図されたユーザ名または パスワードを含むURIを提供すべきではありません。 URIは、ブラウザでよく表示され、クリアテキストのブックマークで保存され、
ユーザエージェントの履歴と仲介アプリケーション(代理人)によってログに記録される、
です。 「パスワード」パラメータがあるもの
稀な場合を除いてユーザー情報成分内に現れる
パスワードが推奨されておらず、
がエラーと見なさ(または単に無視)されるべきである公開することを意図しています。

一般

Request URL:http://foobar:[email protected]:8888/test 
Request Method:GET 
Status Code:200 OK 
Remote Address:127.0.0.1:8888 

は、私は次のように、これはChromeの開発ツールを使用してみましたし、得


...太字や斜体を追加しました応答ヘッダー

Connection:keep-alive 
Content-Length:19 
Content-Type:application/json; charset=utf-8 
Date:Thu, 08 Dec 2016 03:52:35 GMT 
ETag:W/"13-uNGID+rxNJ6jDZKj/wrpcA" 

リクエストヘッダ

GET /test HTTP/1.1 
Host: localhost:8888 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 

だから、それもクロームによって渡されているユーザー名とパスワードの情報のようには見えません。残念ながら、あなたはこのスキーマを使用しようとしている場合あなたは運がないと思います。権限ヘッダーを設定したり、独自のカスタムヘッダー(過去に行ったことです)を設定したり、クエリ文字列に資格情報を渡したりする必要があります。

+0

ジェフが助けてくれてありがとう、運がいいえエラーの説明を更新しました – randy

+0

@randy上記を参照してください... –

関連する問題