初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2019-01-25 12:35:45

Shin
Member

cURL を利用したクライアント認証

「フィールドへ挿入」で、cURLを使って、別のシステムからのAPIを利用したデータ連携を行なっていました。
今までは認証が不要だったのですが、クラウドのシステムへ以降したため、クライアント認証が必要になりました。
FielMaker 内部処理だけでは無理なんでしょうか。(--key --certification などはサポートされていませんね)

Offline

#2 2020-04-23 18:21:53

Shin
Member

Re: cURL を利用したクライアント認証

MBS プラグイン、または、BaseElement プラグイン を使って、接続することが可能になりました。
関連するスレッドが、URLから挿入でのSSL認証について にもあります。

例として、ORCA というクラウドのシステムにアクセスして、患者病名を取り出すサンプルです。

    変数を設定 [ $URL ; 値: "ap-proxy.orca.orcamo.jp" ]
    変数を設定 [ $PORT ; 値: "8080" ]
    #
       変数を設定 [ $OPTION ]
       変数を設定 [ $CMD ; 値: "/api01rv2/diseasegetv2?class=01" ]
       変数を設定 [ $POST ; 値: "<data>    <disease_inforeq type=\"record\">        <Patient_ID type=\"string\">" & $ID & "</Patient_ID>                                   <Base_Date type=\"string\"></Base_Date>        <Select_Mode type=\"string\">All</Select_Mode>    </disease_inforeq> </data>" ]
    
    #
    # Start new session
    変数を設定 [ $curl ; 値: MBS (   "CURL.New" ) ]
    変数を設定 [ $result ; 値: MBS (   "CURL.SetOptionURL" ;   $curl ; "https://" & $URL & $CMD ) ]
    変数を設定 [ $result ; 値: MBS (   "CURL.SetOptionPort" ;   $curl ; $PORT ) ]
    変数を設定 [ $result ; 値: MBS (   "CURL.SetOptionUsername" ; $curl ; $Username ) ]
    変数を設定 [ $result ; 値: MBS (   "CURL.SetOptionPassword" ; $curl ; $Password ) ]
    #
    変数を設定 [ $result ; 値: MBS(   "CURL.SetOptionCertInfo"; $curl; 1 ) ]
    変数を設定 [ $result ; 値: MBS (   "CURL.SetOptionSSLCertType" ; $curl ; "P12" ) ]
    変数を設定 [ $result ; 値: MBS (   "CURL.SetOptionSSLCert" ; $curl ; $SSLCert ) ]
    変数を設定 [ $result ; 値: MBS (   "CURL.SetOptionCAINFO" ; $curl ; $CAINFO ) ]
    変数を設定 [ $result ; 値: MBS (   "CURL.SetOptionKeyPassword" ; $curl ; $KeyPassword ) ]
    #
    If [ $POST ≠ 0 ]
       変数を設定 [ $result ; 値: MBS (   "CURL.SetOptionHTTPHeader" ; $curl ; "Content-Type: application/xml" ) ]
       変数を設定 [ $result ; 値: MBS (   "CURL.SetOptionPost" ; $curl ;1 ) ]
       変数を設定 [ $result ; 値: MBS (   "CURL.SetOptionPostFields" ; $curl ; $POST ) ]
    End If
    #
    # RUN now
    フィールド設定 [ CURL Test::Result ; MBS(   "CURL.Perform"; $curl ) ]
    # Check result
    フィールド設定 [ CURL Test::Text ; MBS(   "CURL.GetResultAsText"; $curl; "UTF8" ) ]
    フィールド設定 [ CURL Test::debug ; MBS(   "CURL.GetDebugAsText"; $curl ) ]
    フィールド設定 [ CURL Test::certinfo ; MBS(   "CURL.GetCertinfo"; $curl; "UTF8" ) ]
    # Cleanup
    変数を設定 [ $result ; 値: MBS(   "CURL.Cleanup";   $curl ) ] 

Last edited by Shin (2020-04-24 08:53:48)

Offline

#3 2020-05-22 09:05:31

Shin
Member

Re: cURL を利用したクライアント認証

FIleMaker 19 で、cURL にクライアント認証のオプションが追加されているようです。
これで、内部完結です。

ヘルプにはまだ収載されていないようですのが、
[URL から挿入] スクリプトステップの新しい cURL オプション

Last edited by Shin (2020-05-28 09:52:41)

Offline

#4 2020-12-23 03:40:19

calafate
Member

Re: cURL を利用したクライアント認証

Shin様

FileMakerからORCAクラウドへの接続方法を探っていてこのスレッドに辿り着きました。
現状詰まっており、アドバイス頂けたら幸いです。

ver19から追加されたオプションでの記述なのですが、例えば患者情報取得(patientgetv2?id=)の場合、

手探りでやっているのですが、urlから挿入のオプションボックスへの直書きで、

"-X \"POST\" "
&
"-H \"Authorization:Basic " & $orcaId & ":" & $orcaPw &  "\" "
&
"--cert @$sslCertificate"
&
"--pass" & $sslPw
&
"--cert-type \"P12\" "

という記述でやってみたのですが、うまくいかず、

管理機構に質問すると
認証は
--basic -u ユーザー名:APIキー (ユーザー名はオプション)
でやってくれとの返答で、
--cacert [./ca.crt]
 --cert [crtファイル]
 --key [pemファイル]
というオプション記述だとの返答だったのです。思っているのとかなり違う方法です。
しかし無反応でして。
--cacertはFMのcURLオプションではサポートリストに載っていないので無視されてるとは思いますが。

Offline

#5 2020-12-23 06:57:22

himadanee
Guest

Re: cURL を利用したクライアント認証

一見して間違いとわかるのは、オプションの間にスペースがないことです。
&でオプションの””を区切らずに1つの””の中で改行すればスペースになります。それか、忘れないように必ず先頭にスペースを入れる。
" -option value" &

~でやってくれ、といわれて、それがFMでサポートされてないオプションなら、そこのサイトは(プラグインなしでは)接続不可能といのが第一印象ですが。。。--cacertは他で代用できるものですか?

#6 2020-12-23 08:46:24

Shin
Member

Re: cURL を利用したクライアント認証

--cacert はなくても繋がるようです。また、-u が抜けているようですが。検証していませんが、文法的には

" -H Authorization:Basic " & $orcaId & ":" & $orcaPw
&
" -X POST "
&
" --cert-type P12 --cert " & $sslCertificate & " --key " & $sslPw & " & " -u " & $orcaId & ":" & $orcaPw
ではどうですか。

Last edited by Shin (2020-12-23 11:58:47)

Offline

#7 2020-12-23 10:37:12

calafate
Member

Re: cURL を利用したクライアント認証

>>himadanee様
アドバイスありがとうございます。cURLのオプション文は、デバッグできないのでいつも凡ミスに悩まされます。スペースの有無にも注意ですね。

>>Shin様
ありがとうございます。
教えて頂いた文でやってみます。とにかくトライアンドエラーを繰り返してみます。

Offline

#8 2020-12-23 13:18:45

calafate
Member

Re: cURL を利用したクライアント認証

" -H Authorization:Basic " & $orcaId & ":" & $orcaPw
&
" -X POST "
&
" --cert-type P12 --cert " & $sslCertificate & " --key " & $sslPw & " & " -u " & $orcaId & ":" & $orcaPw
でやってみたのですが、通らず、

$sslCertificateがオブジェクトフィールドに保持したファイルなので、
@$sslCertificateで以下のように最終行を変更してみても同じく「SSL証明書エラー」と出ます。
"--cert-type P12 --cert @$sslCertificate --key " & $sslPw & " -u " & $orcaId & ":" & $orcaPw

SSL証明書は間違いないなく.p12のファイルを指定しており、
https://sms.orca.orcamo.jp/rpc/api01rv2/   以下にパラメーターを付与しております。
SSL証明書エラーはサーバーが返しているのではなく、FMから返ってきているようなのですが、、、。

プラグインの方も考慮しようかと思いますが、FM単体で完遂できればそれに越したことはないと思いまして。

Offline

#9 2020-12-23 13:58:37

Shin
Member

Re: cURL を利用したクライアント認証

$orcaId , $orcaPw は、証明書と同封されていたものですか。
また、証明書ファイルのコードは大丈夫ですか?エンコードなどしていませんか。
もう一度、
" --cert-type P12 --cert $sslCertificate --key $sslPw -u " & $orcaId & ":" & $orcaPw
だけで試していただけるとどうですか。

curl コマンドで試してみる手もありますよ。デバッグモードもありますし。

Last edited by Shin (2020-12-23 16:52:57)

Offline

#10 2020-12-24 10:15:20

calafate
Member

Re: cURL を利用したクライアント認証

ありがとうございます。
エンコードとかはやっていないんですが、、、。
Termnalからcurl試してみます。debugはverboseオプションですね。

Offline

#11 2020-12-24 16:04:15

himadanee
Guest

Re: cURL を利用したクライアント認証

$sslPw という変数名が気になりますが、これは「パスワード」ではなく「ファイル」を指定するオプションですよね。
ヘルプの引用
--key <$[$]FileMaker 変数>
プライベートキーファイル。この別のファイルにプライベートキーを保存できます

--cert
も、ファイルを指定するオプションなので、Shinさんの返答にあるように変数名を引数に書かないとだめです。変数値を連結したり変数名の前に@をつける書式はありません。(@をつけたりつけなかったり、オプションの統一性がないのが今一よくわかりませんが...)

#12 2020-12-25 05:47:47

calafate
Member

Re: cURL を利用したクライアント認証

文字列、ファイル指定、それぞれで試しており、混在していてすみません。
変数名の前の@ですが、ファイル指定する時は変数名の頭に@を使用するとの認識があるのですが(cURLが添付ファイルと解釈する)、ちょっと使い方が曖昧になっているかもしれません。
-d @$post_data
のような感じで一旦添付ファイルを変数に入れて、@を付与して変数と一緒に渡すと思っていたのですが、、、。

Offline

#13 2020-12-25 08:26:37

himadanee
Guest

Re: cURL を利用したクライアント認証

ちょっと不明瞭でしたか、
(@をつけたりつけなかったり、オプションの統一性がないのが今一よくわかりませんが...)
はFMの仕様についての発言でした。
ヘルプ参照してください。-dなどは@が必要です。同じオブジェクトフィールドの参照でも、オプションによって@が必要なのとそうでないのがあります。注の3と4です。
確か元々のcURLに@をつける書式があった気がしますが、それをFMに持ち込まれてもややこしいだけだと思うんですけど

#14 2020-12-25 09:42:45

calafate
Member

Re: cURL を利用したクライアント認証

ご指導ありがとうございます。
まだまだ認識不足ですが、とにかく出来る限りの事は全てトライしてみます。
cURLはわかってくると色々な事ができて、それがFMから利用出来るのですから素晴らしいですね。

Offline

#15 2021-01-05 16:32:19

Shin
Member

Re: cURL を利用したクライアント認証

機密データの確認が必要でしたので、フォーラム外で話していました。
"--cert-type P12 --cert $sslCertificate --key " & $sslPw & " -u " & $orcaId & ":" & $orcaPw
で接続できたそうです。このクラウドは、提供してくるクライアント情報の名前がちょっと変わっているので、オンプレミスからの移行では、取り違えが多く発生しそうです。

Offline

#16 2021-01-08 13:46:55

calafate
Member

Re: cURL を利用したクライアント認証

Shin様

こちらからの報告が遅れてすみません。
その他APIもちゃんとレスポンス取得できております。

認証以外はポストデータの組み立てだけなので、認証さえ通れば後はなんとかいけそうです。

このクラウドはまだ殆どのレスポンスがXMLで返ってくるのでJSONへの変換を間に挟みますが、FileMaker純正機能だけで完結出来て素晴らしいです。

ちなみにxml => JSONへの変換はJavaScriptのライブラリ https://github.com/nashwaan/xml-js を使わせて頂き、web viewerのJSで変換して戻しています。
これはjson => xmlも可能です。うまくパースできない場合もあるので保険で以下のスクリプトも用意させてもらっています。
https://github.com/stevenwhitespacesystems/fm-xml2json
こちらはxml => JSONのみで大きなxmlは無理ですよと断りがありますが、手軽に使えて有り難いです。

本当に助かりました。
ありがとうございます。

Offline

#17 2021-01-10 16:48:57

Shin
Member

Re: cURL を利用したクライアント認証

定型のxmlですので、テキスト処理でデータを取り出したほうが早いかもしれませんよ。
送信用も、カラのxmlを用意して必要なデータを埋め込んでいくだけで十分なような。病名のような繰り返しのモノも、ブロックごとに組み立てていけばいいのかも。(きれいな処理ではないですが)

Last edited by Shin (2021-01-14 16:18:41)

Offline

#18 2022-03-30 16:21:45

AHC
Guest

Re: cURL を利用したクライアント認証

Shin wrote:

機密データの確認が必要でしたので、フォーラム外で話していました。
"--cert-type P12 --cert $sslCertificate --key " & $sslPw & " -u " & $orcaId & ":" & $orcaPw
で接続できたそうです。このクラウドは、提供してくるクライアント情報の名前がちょっと変わっているので、オンプレミスからの移行では、取り違えが多く発生しそうです。


上記cURLオプションの具体的な値($変数)を教えていただけませんか?
あと、値の変数はエスケープなしでいけましたか?
解決済みのところ申し訳ございません。ご教示願います。

例)
" --cert-type P12" &
" --cert YYYY.crt:pass" &
" --key YYYY.pem" &
" -u UNAME:apikey"

#19 2022-03-30 21:20:29

calafate
Member

Re: cURL を利用したクライアント認証

↑で皆様からアドバイスを頂いた者です。

YYYY.crt:pass ($sslCertificate)は.p12ファイルそのものを変数に格納しています。
UNAME($orcaId)はそのままorcaのID
apikey($orcaPw)はorcaのパスワードでなく、apikeyです。


" -H \"POST\" "
&
" -H \"Content-Type:text/xml; charset=utf-8\" "
&
" --cert-type P12 "
&
" --cert $cert "  //p12ファイル
&
" -pass " & $sslPw & " "  //sslパスワード
&
" -u " & $account  & " " //orcaId:apiKey
&
" -d @$data "  //リクエストとしてのxmlデータ

こんな感じです。
参考になれば幸いです。

Offline

#20 2022-04-04 11:31:26

AHC
Guest

Re: cURL を利用したクライアント認証

情報ありがとうございます。

参考にしてやってみたのですが…下記のSSLエラーになってしまいます。

```
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
```


ちなみに
> p12ファイルそのものを変数に格納
とは、ファイルパスですよね?

あと、
--keyでpemファイルの指定はしなくてもよいのでしょうか?

もしかして、p12ファイル中身自体に問題があるのだろうか…?

#21 2022-04-04 11:45:12

himadanee
Guest

Re: cURL を利用したクライアント認証

ここを見てください。
https://help.claris.com/ja/pro-help/con … s.html#tn3
ファイルへのアクセスはすべて禁止されています。ファイルパスは指定できません。
ファイルを使用する場合は、変数にオブジェクトフィールドを設定して、その変数を指定します。(オブジェクトフィールド内のファイルが使われたり、結果ファイルがオブジェクトフィールドに入る)

最新のFMを使ってますか?古いバージョンはcertオプション自体サポートされてません。

#22 2022-04-06 09:20:25

AHC
Guest

Re: cURL を利用したクライアント認証

himadanee wrote:

ここを見てください。
https://help.claris.com/ja/pro-help/con … s.html#tn3
ファイルへのアクセスはすべて禁止されています。ファイルパスは指定できません。
ファイルを使用する場合は、変数にオブジェクトフィールドを設定して、その変数を指定します。(オブジェクトフィールド内のファイルが使われたり、結果ファイルがオブジェクトフィールドに入る)

ご回答ありがとうございます。
スクリプト成功しました。
後から読まれる方のために長時間引っかかっていた具体的な失敗例と成功例を記載しておきます。

=== × certファイルを送信する際のcURLオプション失敗例 ===
① " --cert " & $cert                     //$cert=p12ファイルのフルパス
② " --cert " & API::cert_p12         //$cert=p12ファイル本体を保存したフィールド
③ " --cert " & $cert                    //$cert=p12ファイル本体を保存したフィールド

=== ○ certファイルを送信する際のcURLオプション成功例 ===
変数を設定 [ $cert_p12 ; 値: API::cert_p12 ]   //p12ファイル本体を保存したフィールドを変数に設定
① " --cert  $cert”                            //$cert=上記のp12ファイル本体を保存したフィールドの変数を&を使わず記載する(重要!)


終わってみれば簡単な事でしたが、今までの経験上、変数($cert)の中身を使うはずと思い証明書のフルパスを設定したり、証明書そのものをフィールドに保存して設定したりし、そのフィールドや変数を&(アンパサンド)でつないでいましたが、それが仇となっていました。

まあ、私の知識不足のせいですが低レベルな質問をして申し訳ございませんでした。
上手くいきましたので報告させていただきます。ご回答いただいた皆様、ありがとうございました。

Registered users online in this topic: 0, guests: 1
[Bot] claudebot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 585.27 KiB (Peak: 622.18 KiB) ]