cloudformation cognito - cara menyiapkan pengaturan klien aplikasi, domain, dan identitas federasi melalui templat sam
<p>saya sudah memiliki templat cloudformation pool pengguna cognito saya berfungsi, dan memilikinya terintegrasi ke gateway api saya. tapi entah bagaimana saya masih harus mengkonfigurasi secara manual pengaturan aplikasi klien, domain, dan identitas gabungan untuk memiliki portal login yang berfungsi untuk para pengguna. saya telah mencari di sana-sini untuk solusi yang mungkin dalam mengotomatisasi ini, tetapi saya tidak bisa menemukan apa pun yang dekat dengannya.</p><p>saya ingin mengotomatiskan konfigurasi pengaturan aplikasi klien, domain, dan identitas gabungan melalui cloudformation sam template sehingga saya tidak perlu melakukan ini secara manual.</p><p>semua saran sangatlah diapresiasi. terima kasih.</p><p>(lampiran diposting untuk info tambahan)</p><ul> <li> <a href="https://i.stack.imgur.com/i7nst.png">https://i.stack.imgur.com/i7nst.png</a> </li> <li> <a href="https://i.stack.imgur.com/zbiti.png">https://i.stack.imgur.com/zbiti.png</a> </li> <li> <a href="https://i.stack.imgur.com/f8rfh.png">https://i.stack.imgur.com/f8rfh.png</a> </li> </ul>
<p>sepertinya tidak ada cara untuk memberikan <em>integrasi aplikasi -&gt; nama domain</em> dan <em>federasi -&gt; penyedia identitas</em> melalui cloudformation.</p><p>saya hanya menemukan referensi untuk <a href="https://docs.aws.amazon.com/awscloudformation/latest/userguide/aws-resource-cognito-userpoolclient.html"><strong>user pool client</strong></a> (<em>pengaturan umum -&gt; klien aplikasi</em>) tetapi tidak akan mengonfigurasi <em>integrasi aplikasi -&gt; pengaturan klien aplikasi</em>.</p><p>jika anda perlu mengotomatisasi proses penyediaan <a href="https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-domain.html"><em>nama domain</em></a> , <a href="https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-identity-provider.html"><em>penyedia identitas</em></a> dan <a href="https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html"><em>pengaturan klien aplikasi</em></a> untuk kelompok pengguna , anda dapat melakukannya dengan membuat skrip khusus (aws cli) atau lambda (aws sdk) yang harus dilakukan setelah penyebaran tumpukan.</p><p><br/> <strong>perbarui</strong></p><p>lihatlah <a href="https://github.com/rosberglinhares/cloudformationcognitocustomresources"><strong>contoh luar biasa</strong></a> ( <a href="https://stackoverflow.com/a/50980165/9576697">jawaban di bawah</a> ) yang menunjukkan penggunaan <a href="https://docs.aws.amazon.com/awscloudformation/latest/userguide/template-custom-resources.html">cloudformation custom resources</a> dengan lambda.</p>
<p>aku akan menusuk pertanyaanmu kemarin, tapi kupikir aku harus memikirkannya terlebih dahulu.</p><p>saya benar-benar tidak bisa memberi tahu anda apa "fungsi lain" yang harus anda berikan untuk pengguna anda. saya tidak terpisah dari tim anda. sepertinya anda memaku sebagian besar dari mereka, tetapi pada akhirnya saya tidak dapat membuat keputusan atau memberikan saran ketika kami benar-benar tidak memiliki perincian lengkap tentang apa yang dilakukan aplikasi anda di luar yang memungkinkan mereka membuat formulir.</p><p>namun, saya dapat mengarahkan anda ke beberapa aplikasi lain di luar sana yang dapat memberi anda beberapa gagasan tentang fungsi apa yang dapat anda tambahkan.</p><ul> <li> <a href="http://pencil.evolus.vn/en-us/home.aspx">pensil</a> - perangkat lunak wireframing/prototyping, periksa fungsionalitasnya</li> <li> <a href="http://iplotz.com/">iplotz</a> - perangkat lunak wireframing/prototyping, periksa fungsionalitasnya</li> <li>google - <a href="http://googlesystem.blogspot.com/2007/02/learning-googles-keyboard-shortcuts.html">ikhtisar pintasan</a> </li> <li>gmail - <a href="http://mail.google.com/support/bin/answer.py?hl=en&amp;answer=6594">daftar pintasan</a> </li> <li>google documents - <a href="http://docs.google.com/support/bin/answer.py?hl=en&amp;answer=66280">daftar pintasan</a> </li> <li> <a href="http://wufoo.com/">wufoo</a> - pembuat formulir online populer, lihat apa yang mereka lakukan</li> </ul><p>anda bisa membuat semua jenis pintasan keyboard gila untuk aplikasi anda. namun, anda mungkin ingin tetap menggunakan yang paling umum digunakan, yang sepertinya sudah anda daftarkan. jika anda akan membuat pintasan baru, pastikan pintasannya intuitif bagi pengguna.</p><p>saya harap tautan itu terbukti spark beberapa ide untuk anda dan tim anda, dan maaf saya tidak bisa memberikan contoh yang tepat.</p> <p>akhirnya, inilah bagaimana saya mengadaptasi dan menempelkan saran dari @tostinni, @stefgosselin, @ uwe999 jawaban dan lainnya:</p><pre><code>/** * implementation of hook\_form\_alter(). */ function custom\_module\_form\_alter(&amp;$form, &amp;$form\_state, $form\_id) { switch ($form\_id) { case 'my\_form\_id': // add custom validation callback $form['#validate'][] = 'custom\_module\_my\_form\_id\_validate'; break; ... default: break; } } </code></pre><p>maka semua fungsi yang saya implementasikan di:</p><pre><code>/** * implementation of hook\_form\_form\_id\_alter */ function custom\_module\_my\_form\_id\_validate(&amp;$form, &amp;$form\_state) { //retrieve the value for your field $value = $form\_state['values']['field\_my\_field']['und'][0]['value']; //execute a count query to see if there's other similar values. $query = new entityfieldquery; $query-&gt;entitycondition('entity\_type', 'field\_collection\_item') -&gt;fieldcondition('field\_my\_field', 'value', $value) -&gt;count(); $count = $query-&gt;execute(); if ($count &gt; 0) { form\_set\_error('field\_my\_field', 'unique field value is already used.'); } } </code></pre><p>saya sudah mencoba bekerja dengan <code>entity\_metadata\_wrapper</code> tapi sayangnya saya belum berhasil.</p><p>terima kasih atas jawaban anda.</p> <p>aha! moment - #\_\_content tidak lagi memiliki kolom <code>params</code>, jadi penyesuaian berikut harus dibuat agar plugin dapat bekerja dengan komponen/tabel dengan <code>attribs</code> alih-alih <code>params</code> (yang tampaknya hanya menjadi #\_\_content pada v3.2):</p><ol> <li>ubah nama <code>fields</code> menjadi "attribs"</li> <li>ubah nama <code>fieldset</code> menjadi sesuatu yang unik (saya menggunakan nama plugin)</li> <li>tambahkan string bahasa untuk tab pada halaman pengeditan konten</li> </ol><p><strong>/ form/content.xml</strong></p><pre><code>&lt;form&gt; &lt;fields name="attribs" &gt; &lt;fieldset name="gdp" &gt; &lt;field name="myfield" type="text" label="plg\_content\_gdp\_myfield" /&gt; &lt;/fieldset&gt; &lt;/fields&gt; &lt;/form&gt; </code></pre><p><strong>en-gb.plg\_content\_pass.ini</strong></p><pre><code>com\_content\_gdp\_fieldset\_label="my custom fields" </code></pre> <p>seperti yang saya jawab <a href="https://dba.stackexchange.com/questions/2820/why-dont-my-my-cnf-settings-work/2822#2822">di sini</a> , anda dapat menambahkan bagian untuk setiap pengguna/host/db yang anda hubungkan menggunakan sintaks di <code>~/.my.cnf</code> anda:</p><pre><code>[clienthost1] # note: client + host1 user=myuser password=mypass database=dbname host=server.location.com </code></pre><p>setelah ini ada di pengguna anda <code>.my.cnf</code>, anda dapat menggunakannya dengan melakukan ini pada baris perintah:</p><pre><code>$ mysql --defaults-group-suffix=host1 </code></pre> <p>ini adalah masalah non-sepele yang hampir semua orang memiliki jawaban berbeda: tidak ada cara drupal kanonik untuk menangani pementasan ke dorongan produksi. dries buytaert, orang yang menjalankan pertunjukan drupal, menjadikannya salah satu <a href="http://buytaert.net/state-of-drupal-presentation-march-2011">inisiatif utama drupal 8</a> . tentu saja, drupal 7 baru saja dirilis, jadi akan butuh waktu sebelum itu menghasilkan buah.</p><p>masalahnya dapat dipecah menjadi dua masalah terpisah:</p><ul> <li>konfigurasi pementasan (variabel, tipe konten, bidang, tampilan, dll.)</li> <li>pementasan konten (node, pengguna, dll.)</li> </ul><p>yang pertama dapat sebagian besar ditangani oleh modul <a href="http://drupal.org/project/features">fitur</a> , yang akan mengambil konfigurasi situs anda dan mengubahnya menjadi modul yang dapat anda tambahkan ke instalasi drupal anda: dengan cara ini, anda dapat menambahkannya ke sistem kontrol versi anda dan tidak perlu khawatir akan meledak ketika anda memigrasi konten anda.</p><p>yang terakhir ini sangat rumit, karena di situs yang aktif, kemungkinan konten akan berubah pada produksi bahkan setelah anda melakukan sinkronisasi awal dengan lingkungan pengembangan anda. ini mencegah penggantian konten secara grosir selama pementasan seperti yang dapat anda lakukan dengan konfigurasi.</p><p>selain itu, drupal tidak menggunakan pengidentifikasi unik universal (uuid) untuk konten: setiap kali node atau pengguna ditambahkan, id bertambah satu. jadi, apa yang mungkin node 45 di situs pengembangan anda mungkin node 90 di situs produksi anda.</p><p>sayangnya, saya tidak punya solusi yang bagus untuk ini: pementasan konten adalah kelemahan drupal. apa yang saya pribadi lakukan adalah menambahkan konten hanya di situs produksi. jika klien ingin melihat bagaimana konten terlihat sebelum ditayangkan, saya akan membuat klon dari situs produksi yang hanya dapat diakses oleh klien. kemudian, setelah disetujui, perubahan yang sama kemudian dilakukan langsung ke produksi.</p><p>ada alternatif lain yang dilemparkan: modul <a href="http://drupal.org/project/deploy">deploy</a> . seharusnya meningkatkan <a href="http://drupal.org/project/services">layanan</a> untuk membuat konten pementasan relatif tidak menyakitkan. tapi saya tidak bisa menjamin keefektifannya dan tidak memiliki versi drupal 7.</p> <p>katakanlah anda memiliki tabel tempat anda menyimpan kata sandi untuk setiap orang.</p><p>untuk "menyimpan" kata sandi yang dihasilkan, lakukan hal berikut</p><ol> <li>dapatkan login dari pengguna</li> <li>dapatkan kata sandi</li> <li>menghasilkan garam dari nilai acak. katakanlah, dari/dev/random (seperti yang disarankan @michal), anda mendapat "a12bc34de56fg"</li> <li>gunakan beberapa fungsi hashing untuk menghasilkan kata sandi hash. katakanlah kata sandi asli adalah "1 kata sandi" dan anda akan menggunakan hashing sha. anda akan melakukannya</li> </ol><p>hashed\_password = sha (sha (sha (.... sha ("1passworda12bc34de56fg")))))))))))</p><p>simpan kata sandi, dengan login dan garam, di tabel.</p><pre><code>login password salt  john a7b82783... a12bc34de56fg </code></pre><p>dan kemudian, untuk memverifikasi ketika pengguna mengakses aplikasi anda:</p><ol> <li>dapatkan login dan kata sandi</li> <li>ambil garam untuk login dari database (anda akan mendapatkan garam: a12bc34de56fg)</li> <li>gabungkan kata sandi teks biasa dengan garam dan lakukan semua hashing lagi:</li> </ol><p>hashed\_password = sha (sha (sha (.... sha ("1passworda12bc34de56fg")))))))))))</p><p>verifikasi apakah hashed\_password yang anda hitung sama dengan yang disimpan dalam database. anda akan tahu apakah kata sandi itu benar atau tidak.</p><p>itu dia!. anda bisa mendapatkan garam dari sumber acak yang anda suka. kenapa harus acak? karena garam non-acak akan membuatnya lebih mudah untuk mencoba memaksa aplikasi anda.</p> <p>untuk memetakan domain anda, anda dapat mempertimbangkan untuk menggunakan <a href="http://wordpress.org/extend/plugins/wordpress-mu-domain-mapping/">plugin pemetaan domain mu wordpress</a> yang bekerja dengan wordpress 3.0 juga.</p><p>otto memiliki tutorial online: <a href="http://ottopress.com/2010/wordpress-3-0-multisite-domain-mapping-tutorial/">wordpress 3.0: tutorial pemetaan domain multisite</a> </p><p>di samping itu impor/ekspor terutama harus melakukan pekerjaan untuk mentransfer situs.</p> <p>shmuel613, akan lebih baik untuk memperbarui pertanyaan awal anda daripada menjawab. lebih baik jika ada satu tempat yang berisi pertanyaan lengkap daripada menyebar dalam diskusi.</p><p>jawaban ben masuk akal, kecuali ia tampaknya memiliki 'tidak' di mana ia tidak menginginkannya. menjatuhkan tabel hanya jika<strong> tidak </strong>ada tidak tepat.</p><p>anda memang membutuhkan banyak pernyataan. buat dengan kondisional lalu isi:</p><ol> <li>buat tabel sementara jika tidak ada fubar (id int, name varchar (80))</li> <li>truncate table fubar</li> <li>masukkan ke dalam fubar pilih * dari barfu</li> </ol><p>atau cukup jatuhkan dan buat ulang</p><ol> <li>drop tabel jika ada fubar</li> <li>buat tabel sementara id select fubar, nama dari barfu</li> </ol><p>dengan sql murni itu adalah dua kelas solusi nyata anda. saya suka yang kedua lebih baik.</p><p>(dengan prosedur tersimpan anda bisa menguranginya menjadi satu pernyataan. sesuatu seperti: truncateandpopulate (fubar) tetapi pada saat anda menulis kode untuk truncateandpopulate () anda akan menghabiskan lebih banyak waktu daripada hanya menggunakan sql di atas.)</p> <p>berikut adalah konsep gagasan menggunakan plugin:</p><p>anda perlu membuat <strong>plugin sistem</strong> (saya tidak membahasnya) dan menggunakan acara <code>onbeforerender</code>. di dalam anda mendapatkan instance dari toolbar anda dan menambahkan tombol.</p><pre><code>class plgsystemcustomtoolbar extends jplugin { public function onbeforerender() { // get the application object $app = jfactory::getapplication(); // run in backend if ($app-&gt;isadmin()  true) { // get the input object $input = $app-&gt;input; // append button just on articles if ($input-&gt;getcmd('option')  'com\_content' &amp;&amp; $input-&gt;getcmd('view', 'articles')  'articles') { // get an instance of the toolbar $toolbar = jtoolbar::getinstance('toolbar'); // add your custom button here $url = jroute::\_('index.php?option=com\_example&amp;task=massemail&amp;format=raw'); $toolbar-&gt;appendbutton('link', 'export', 'mass email', $url); } } } } </code></pre> <p>anda perlu mengubah status akun utama anda menjadi publik, dan kemudian mengatur masing-masing album menjadi pribadi. berikut ini rincian lebih lanjut dari <a href="http://pic.pbsrc.com/help/photobuckethelp.htm">bantuan photobucket</a> :</p><blockquote> <p>anda dapat mengedit pengaturan privasi album anda di halaman semua album. status akun utama anda harus diatur ke publik sebelum anda dapat mengubah pengaturan privasi masing-masing album. lihat mengubah pengaturan privasi akun anda untuk instruksi. jika akun anda bersifat publik, anda dapat mengubah status masing-masing album, pada tingkat pertama, dalam akun anda.</p> <p>masuk ke akun photobucket anda. klik semua album di menu sekunder. daftar semua album anda ditampilkan. arahkan mouse ke album yang privasinya ingin anda edit. klik tautan edit. munculan edit album ditampilkan. lihat itu pilih apakah albumnya adalah publik atau pribadi. catatan:</p> <p>hanya album di tingkat pertama yang dapat ditetapkan untuk publik atau pribadi. album di tingkat kedua, ketiga, dll mewarisi pengaturan privasi dari album tingkat pertama di mana mereka ada. jika anda membuat album pribadi, anda dapat menambahkan kata sandi tamu. untuk menguji akses tamu, anda harus keluar dari akun photobucket anda. pastikan kata sandi tamu yang anda berikan berbeda dengan kata sandi administratif utama anda. jika anda membuatnya sama atau serupa, peluang anda untuk masuk ke akun anda sebagai tamu atau seseorang yang menebak kata sandi utama anda lebih mungkin. saat anda menetapkan kata sandi ini, gunakan kombinasi huruf dan angka untuk keamanan tambahan. kata sandi peka huruf besar-kecil, jadi kombinasi huruf besar dan kecil juga bagus. klik simpan. jika anda tidak mengklik simpan, perubahan anda akan dibuang.</p> </blockquote>