From 7df7e082087c848115104520de0b20b942af6bb0 Mon Sep 17 00:00:00 2001 From: "Han Verstraete (OpenFaaS Ltd)" Date: Thu, 11 Jun 2026 17:43:41 +0200 Subject: [PATCH 1/2] Document the faas-cli Device Authorization flow for SSO Document the new Device Authorization flow for logging in with the faas-cli. Update the provider instuctions for Keycloak and Google to document enabling support for the Device Authorization flow. Rework the generic SSO CLI page to describe the supported OAuth flows more clearly. Signed-off-by: Han Verstraete (OpenFaaS Ltd) --- .../google/google-application-type.png | Bin 0 -> 123240 bytes docs/openfaas-pro/sso/cli.md | 50 ++++++++++++-- docs/openfaas-pro/sso/google.md | 65 ++++++++++++++---- docs/openfaas-pro/sso/keycloak.md | 39 ++++++++++- docs/openfaas-pro/sso/overview.md | 5 +- 5 files changed, 134 insertions(+), 25 deletions(-) create mode 100644 docs/images/oidc-configuration/google/google-application-type.png diff --git a/docs/images/oidc-configuration/google/google-application-type.png b/docs/images/oidc-configuration/google/google-application-type.png new file mode 100644 index 0000000000000000000000000000000000000000..6b5aca9b9b1fd3b95f54498c6e17741c0baed224 GIT binary patch literal 123240 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�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�Z%^i2DO1DMeO|o8GJ=JN$dhK^TS|=Fi=feSiHAkW3lATG z5We3g-l1WZ%q|KLhGPotDNUU;pVQ5+OBwZBJSZMSi74c7QNg zRXfA2C>eScSTvKN!7xe;Qm`Q1)Bb%bVTSt2AX5SD+Ns4Sy1jeP%XiPp9F z#J7qV-s1^XIL_JaQhS+x}D;a9lv34PvsXcRp=;Avv_ zG?^idg}N^k^ixq}R&HZA^URe>iUz@wg_g;?Vk#S2&e(Ix8pBthPkM>=#xgJ;GJ*rt zrO*QNf}Z!_xOz|`7;Wck1yMWuiM0YB7>=$i3W>720x5 z+}#FYKQwo);DYW-QqpXZ@G_+@^BYrYpmRYNBdNeyy!LgDg7E>9g@`6Arn1a6zs#!H z&q3?07WyPJ#}TW_Y#6lveRk$T4Cfg$}N*mX# z5n&sDo`s+d$ohpNkNRNctrXhiHqk*X_ZN8kMn1`sJt$v+5GTY8mfV3igXe0cmsZ+i;y<)2u+8TWcIHF6*5ebxNHe{T^@3Ei*M1RG`SfG04T_H7S0LE*5PbtbR*WiFJKmPXm+g6of?z_HQ*ihOfg!tO& z&`aCEb7ew&Uui7Ds6C#j>iJ5&tDxNbOmrC#_$ex~Q4a$13?;Cpc$rYkWF)c29|}RE zzgS_IZ$Nzsr_06OHl5@cD3^LPmYJ)LLELq&KdcRgHA7_QN8HtN^YMpcm80URYLw%_ zPf^Xq5@Wczv)n3_9U9F;XBZ`T<~q%$VUB&FiNes=sw0<7eEF6#y1h1mDb2Xktvitx zsHh_N9-yGY-a&w0KF z{}B%}vlVm<$>P7yTGoA>qp&^cYi_hIjuvYw49_*+AEb(YwyRGmzJV;A{Xoa zOgQ{4ahc?LvLlMD%Q)lFD>MCYZqVz8kdF3E|2a?OjX}^5xWDAJ#>W2LsqV|Wt3Z$B zKxU*6&aPmemm}i@`PUi>F}cX4Io~4n#iyGry3$h~18ESbTUpP<09zzQFd(y?8>AZA^07BZ7_gM zXs0sHB9h|j7>m}rQ^>iw-|pLaH;H2%0>~5lHEvG{(d9^PuR}D{Ju+~6@k$&Rt2LX7 z)nFjYq&dM0N0QQULdf+ZQKxFf=3!MzV_i@}`|j;UM>t&}k2yEnZJlPxdcgIn|dcWFcG5Mlb%tcYLZnSfn z^917o*HxEW(J#Z2g%4w6jymw}2VDB84UdTl<{ok2!5T=f2IT0mnF<(tdBS+CDA4w{ zhcr#giJ65IA)5_s>)U;c(8En8v2Ha*_6TCBPq39cn0od4<*GLtt@{@GjnLsR6KFLx zT5VI#GpNI(tZc+O@Ay&T;T?T&wyyv}(u_a2F?I&Cca%fLI%6dC`iE{>A0xj0L zAs32FA_}-2C5^GNOcD;cJUzFvV4psW!%*FJKn*Li_Ey@sbxTRvcnH=l$Ox0$t|s;O z?EV?#Z)l9VnbZU^1!Lep-ik|qLBzpadg4%`@v~_$|A~J5=A83ScWxG|_R*Q^512AI z{;6UISO+HWTO~BX9WtfnpX-;$&v2Lez%y;eHt)QcG zA@n1(*a|B#QE4nuhy<+1vk22e(Bj=#C`Hlvt!%VzFd}7LBLqmxYgnJ`AmUht>+UedS2Qhws z|2g5Zpr7eOgI}L9d(73RaEUmPCq);bkPHwxWq+qa z?m-8Fq&tQZG<}b4DMHuFb;QG4<6Byk4UJ6`x?A%*KUg&XKge+c$=#Q4o&V6;l_d^*YnD_sB=PinIzHRZF!+CG7I6b5|666a=MHebp ztpoS6tJF?1T<#<1D;;zNhqUssAoj$@%U@F7k;+^bUG9g~-v+YDgq ztuLFxaQc@t{JGiW1c9W;mq1f_VAjP9%IL9h_gTL9jKl>7Sp z7a5Kv{1P&d0#*?jE`UT?D{(#2F7QBVK8#~ofT37i?{TfxCSKQnibAl&& zjkL`6^XWnZXOmY~8@Kdo7}M}T4&rKK{n|e*z0G^bHRN?j4XjbDclW$--aYQn$9YfR zULPUOYl#U41K{&rzj2VL5pFJtrES@o6uE^y*bT(g$?zdHHN5N7l$(8JZl#KY z5KENFgjDPm?b*`ne_T^Z@0YCC6USnkLv~Y9I&X-=Z$#d8o8QRl0RAGmF8z3;EYh*pC$f*7FxoOaIM`r9jH6Gq>B@;TPP0yX;Xu zUjxJL^!c5O^)eZN4yN|}Z*kXOczv}G$WBd;NN73m3+_Fsz+-V8B~Jg=0!G!qjYeGq z&ViqBpKk=xO;syckHNpV_HWsQuNs6l_eN)=i2izQq9c&ms`kKJ^Yp*h+qw%_;L4Lf z&zXin=WDVEqBnk<=l@;q*xb*rTifFk_Ups+j{%?bsJu}6pVa&#JYEI3(b>L(|I5fS ziw9sZp6zpF{*U#X0C)}x-&y#zoHGQ#_|(Zv|Ljj_3GiglY-MO=jiQ{f}>G zDhF^PrCYmC?iWtt0E+!9wEY{!w?zOHbLQ$8zet(r0l*L+9MY@xZ=5{43BYqD&_?su za#E52hK7!&)cqU9`*nc@R_>=f{$)@CthkZ0#6R&b4*w%u4ZtbvovG@k-#GaMJf^>` zW&GcH%Euak8wyJtEaDeV6zl*P-ew=*{yP~t{NNq{o{P4YF+X2xHVR;Dbk7~JN1lbnn!<`&GvIY&OeQg7D=~^-(Y#ZP06z=lZ^nQ$48P1nwovt)gh=op|F~91THM=NTCd zrgT;^6<)^M{Y@;ry83gkHg+{#_(fpO!Jka_@S2H9(y42@H}H25zR~(75I3zHE0fqwgWCe#6UuOS}YX-2uLplmW~9 zR`45sA}C-N&}~r>m@9K1TK?*mLB%_2PX+$W?P=2N%+c({A)-Io{G9)GoGZ`ZZaaFS3}yUTp(}kmNVRed>41 zs<{1ZxCnoeh5UNEz)B+Q!Bk=$4`Y2Gd)q7-nYV zcKjgv zu_n7rbrXnFa>MwSZx%Y4$aOka=9Y?Wxml$j>9mKKN3}mA7`kiMu9X>}ryxoR!YN%%j`*ZB=7qKn3`5gNQNLg^>t;l0A9C$`Pg7 zpg;)&lY^gUSbjZoh{bz+>eQ*atPPCChWd#uy@!%p5dj7~t@5_a;unLD4V*vaAoL|*fCeUpatO!(`&qpyI44FvHcuiVPjt z>?yiGGhvflz*kXf{tbg8rdh+Lb3rIodmz$O-wc>`&cG|mh{YC zOHwdKSy!t7_I(1S(w>z8OarP$7T6Xn&&BFGxAYneEJ}bN4Isk6TaEjf$M9slePg2{ zoP6!VvuXka zcQ+Db5Ab2v+2K8 z)~0g)!Sq_xY;BZ$)0@cX+pYcTP8uYfPe2V2%@vZozm0gdi@bi`=5_rkpiv992j|xH zMKs%|t~5xHWF zQud_*oDAzUZ|^(RuA@X==SBh5(gyJhfv&u5KVIj?K5Ta*{IULb<$nI@4uHlx^TIQK zYxdlq8}`9>mGVI+(TmAM^uU8T6Ynold3$V2zbbX}?E&>B6BV%~N%7gn(|4?!3ejlgNBt-cs zlXV|-UpHt>whtK-+k|ZEIWh3DtGv8?@W%tbecD;Wtbp%^js0ojzSW6|dn$m&BE#=< zUTjO3+qULTDLmjwn^a_m@I8CA8RzR?u$qAmAmVs?FcLNq)#i7@2AWOxI#W^r%_|!4 zUneQ6xPk`ENEVf4lQg%gnd%5u)ckDiNbgb#ikk!cs-%^@I zfn{Ti#(*-=TtsEtB`DsG=vO(pW?o_BtWn{US5y+v_}#U%@*W^TBkzxO_AN-3F#(|B z4(LrLWrwaQv@i6v-awSU#@sC0*I%tMY(Hlv7vx$_cA;as({tOl(v^E4CeXnNU)}YU(t&`X zR>rGtG}M&K47Inx-NmgevFzhhD?XdJGYTuTS6dQ7_R4N6Aw?Eg6ihvS>kCIwcQ>Z=*k z5AFTloeldhKxR+0iRCG`_mUT zHBLueWWM!MqO1dsPfV##e~E>$TVF|}GOWz{r@xZklNrIX55U*V>aPj@gRV6yfH-9; zw0La%X;1(O2!Q&Tc^a(OT%%ou-u4`KICMP!=zs*PB~^)DY4>dz?d!F^wp!K}B$le~ zjzV4NILDc)Qh56GY5eQgvu=4=-v}E+zt7a)j-{aK-V!hT*c3YA!h=scqul?{`U-M6 zW&IQ-2QHe0;-S$q09HCcGE%pp?{!_j(#>;?#5Mju-o7#{s_lzgF))EEA|e6?h)9V@ z4yA}lNrN<~NOun{DkuUwGd4Txn$$ zw9=+Bsm(m4U7p!~i+>7XgwYvyqj6nnALzi@8$9mJC~$}q;#q6tF&}ya3f|S+E3X`~ zN66{bPTGBmoZx0NR0#LL0o_5qnbX1+{YIHm5Fn|FF5iyT=xs` z?WK;X82kDYC;^$8w^U<=ZYWS{%s&+%u=J^HYw0PE`FNdo0mFvd5_V+gL6&xJsTBpY zN>|mgnXoQyIw4>JSY$SxXUK!bf$j!pHO90wNBufR^N2K48N&cRJGCBdUu5OmqAbLk0S?6w1kaU zzL_uiAD!ztf%}{Xx}HBSV#`%7_sa{NpNb{lcy;&g-T2TgC($_7lFuU$jsMq&6ik$ zk0%6~yFv!%9v51;htgHRd2Y`4X2rRzcJr8{w2N`yup^DEMXzS#b>K4$==;&&hPcSL zv@|DvUX`*v>}6~+V`kTL6^8gS4Y)scU!!pr-0so5Dt@&8+*^1?lNah(&jz|PrRZob z--OZgWi#1Ir0sH!RRBUPlG|)n{eyF3ZLUsFRqt|IL|=~8xBEPO z6*#IAHbci{F`-!N1|#@#mo3jgL*pYerz~dallBNcBXE^Sxw6qC;X9y%!~&_aU?mQN z2t787Iy%n>)rYT*1OmMZy7o;ycXqMdGr7x z#th18s06_KkSn@>fgggR!h=+CLbU4}8jx$JOv{5JmWaHW)d=2>L8=q1I&&i4 zm(8-E-K-OI9w{uWLXRzoEeyL3`3Yo<`-X_;EZsUu$!6PmRVx1x>WRtAGC|~v<73sc zskI=uY169fkRUU7Uz_#o)glW9#SJXob;!OMPt^PdyO2F7qcs04ttZC1fysJvzNmEj z5it3;*byu#XW#T%JBuH}=*HM0_-24g8>;xe5qAXXKzd=Wx1rUdB!(*6qScMgedzUe zvx=9#_SZw0*bCV@;U?JQeKzlJ67BJA&oBVDB>o{W%nNVsH$aHbm*XdUP8C^he&%fL zIKwnH6uMAi@b02r*ZXbl!xo`NoktDj%vi%SZhId=_uL&o&0R~i&r{0E%dYs48CB?! zrCknhI=E?8g#5VdHl^Z>E}1fHTpVH$xl+VuJAJeF!eEVRhJtdb?L3P&4aQvop<*T> zEg5{A{MrW3VPv}pu7=v8V_>4PSVqV4j(EvrWV)6+%fU^^$SQZ%nVKxxDO14#{Ji9l{NVVZe#u)SJx0WWc?I><(g47cfz^WXhbB0^hI)iX+C9gZXF=UYzof!+>M zR5w9y2eEV;i`Fbdt*11rx-^bN7{kYJ_h26%Y=Ju)mbqL#j7O@1S)d~C05nVyG}l?; zs-Wstzmf92L@zyuX3ms%saDdj*!n6zD<`MaW*)t$#pj4na8FMQkA$_Pq$Nf5z=C9D zv|IAi86oxFLNkr>l8MSQs+U`kbGf;%qO`G7bncQ1sJpBK*nVe=b<{#7G7(&(QxCkX z(dJ27V!ZixrZn|wHibi+Lqh{9?-Z7H4E&_slHbJ^zz|TtFL|}YwZC0s9JqeLsdp}u4wqgk)ME- zt19E>vb6WnwsO-o@AN^Ajn`cJ*o_E|t5Y(s{02>01t;E% z*Q#fY=)2s!7%)`_T#CfjkGEr~;8#UMrWbD3gIx8Y@3VA3u(d>fQDQ zeG^oMwoeV@Nur)P%sIZ-;S|g*aJAIV+5tMta<#pDlvH?21hlOxyMuLHpFlnZUTS9L zhjVj^DQe4><8~|=~ih=X*5-02FA0^21T;VnquK3v`Bjrdyv<)F*BcG zzg>9py6Dl7tKt`(?)BLh%{rAUHFlT|m-YM63BnUYXN^8hc$xoO4W@o4gz4igKR8RzBa19u9iIpjr92F5 zNyL*s!e^2NRY1IjxAnb-R{9=~B-jO=jTovd5tb%}?3e>Y`Z6E-h%lR=jFLPhb5)SK zS0WfBA3sPM=j~NT#(fZcpV4bpd>aH9o=^$G-r*uLl{$~F z-O?47JT!VoJ+MYySHqwNJM0|i$n&V6gOR;bfXNj3#dUEbL%F1Y4O=?;jqaTnsZbwv z@R5_}>KMW_CrNpXI__yZj`F$lT37Ph3&_G(XD4KfPLeqcS*0xG4VokB6D6Ri!DbaQy%z_MNx5(7486G2~s} zf9u!>XK<9iyvF(hhe5WoQc{L3%aEKbVw8dRvl{H2KHsL}FTBm`z6L0Jx4A$!`HERN zZ5-5xO|?ZCefN1^isM24xa@uL3aQZf$dUVpzb*6I&DMP*6{h#Qz_oO)+d^Hs*W%#N zw9fhLGj~*O)S-^`2_C22gJoVXCxS8Sjzm`|^OHm}`l`ITuozxfUE3QBa)njlR(&>v z6X^um^+FFEs**<{F30z&)U!_)n=YH(Kv0f$4k!n8f^oIapEVH=v-Gg-231x_cB%4u~C7&+Rj>_{mOi+$!JEmtwq}h&!(;p zTF6(_kz{yu|Jtp(LW+FT{=3`Q${mT22IX;YI(J(hja3zwe*LgnzdP)!N0(jahEjc5 zdPGL}P1M}cB{Yc-V@j76^4%vm%Qr>H5N~jSIb&O7x`Bc2k6kBQe zs<}1{6lOU@-!|!ye%2hxpePhEt5cQp1dfSFp*J6_J_XQcWX|H=g0Cd?57`Gdo2qA) zhDoW%adg{3HFkmHDKj5iU0xrjc=|M}#`^m(ANCA$x7?fnVPneUlL=j^xQ$-E1)0e# znpkZQ(ams0FXVtC;TY7aknE}9HQFNB>FL+T%3|vxdwX&nm&WB@lUUF$w5u-#P-BY=+2W$pCn|XY z1l51=8+UzEP&{OSdVZ(yrb z%X#fh*OE*TsrBq+fU$|W=YQ0Ac^GG!I+A8L^0`}fd?P|;$3__QdT15J6NhV^-M%~+ zE;sdG!f@%Z;qKl9vDfMg+3eZ{V%H2K!a+d*xu*t($R1YZ%Qj2j82a*goBjMi{Y}>X zGoTu8lZHQ<8P)5pPC*BtceV%q+*v&6tjg`s+SOMPoCeKj(~qO=z~#Mx{*=*-Q!x&) z^b8YScS(=-6Vup!7+$e?hi>&!hfg?HZX*hQ0gXSF2)eGh9Y1GLene2+=)L?^@%j}i zPMkH1%ClsRB9LJ`>+k7%8hF`XaJgn>>ys#Tw~2%6i?wkKt{|H{qeGT|ojyZ#_^PTa z1~@1)3}Fw(uK7)XW;__tjkRJ&BV=;HP+L*JTzjcqpWaz+-J+2G>I2NgPp8HzckWKL z4hG0(ROh(7GW`Oke8+DuSC@octBRv+{eGS3ZhGU`RUccjSDvD$FT1CN1*#|?{g z2xE+M5ikY*?q@P)=JD==qSu4u*@IhA+~&a?Pw3>Q;=W6gI%(lHR<(RLz%`)WT6MpY ze@D{^;RHGO5qtY8^D|lxKQqMS3rHs*&q%SKa`uO8QxB0-&=(opR;v?oYfyJuUoLPf z2{$wAL83QRtEHSyV$QczKa8mU>Xcq&K3Z0wo~6!ZJJ$C|)toh+^^=T*1W9@|4QlEA zvRZv`f8NxC40W!A(Bjw8!nbsHRyvt73yNO0+1OToUUmNV>hu-LW$&wpFpUVU$z(Oh z3fmb4R`AH$iebBlith_aC@)u zJoZLMnN!|;#r2=_0rPo+-jUqM?WuqwlD*1bqF zw_!w_prBxYLHS|2<&_!E@oGx#U)W!4WDaSg$!0Mx0Nbs=^<=_RkL-+s&#tXWfAt2!{c`ngjRzs+;WENoVjG)6DA#A${g1wYGe7dB6unqWj*SWz99w!)l z!xN(~0wAqZ(f3I96wlxtKu;PFS|5?;3nfU7$Avio;=f+i3l=u9v10QJ|E`y3KOAws zd{FJ;Zx532st#xck*&0wgcS^dQPr+T`-BLm+;65-Lvi)DYo_?P`iCwkT)m-KcW{@f z_-zjTlRXAr05h)*B#b1>UcR^+p89X%4;P`qV?nJS@$D7PLJ{`17oY#)Ek5oBZ>1q9 zkw1fS|Gf;1dLsi~&^O(G6R&EhAT<6E<9pHl)9Q)?IdV|)pCE9G?6U5Z+F!B(AqDKU zjB%obWRZN4h|_)8A)D5_W7&Uw)P~Y35E%pgbsGW|IK%?akTbBcX`easGwJTj69aTp zZl8sh7^fe1?&4zC1EBA*_}QlEH%|#anSwnul}aF`${+A%p_oSMuMCk{K)n=>Y5V}5 z{5SGo&F2^UZ~yg~pospEfyX?ax53Y#J>i1sbJ#DDCz!x<4@Axp*7>Kb{3dV$iu9KW zAL7NI(VkzS5bXT`{XI4?A?7gw)|Rw&ICm32wE6~k_vbCszhvzvlo6usUPutNQfNik z^(PB|y)GC6Z`K|W;=a+4v@A0o@cy&c-6gpSNH1X5r>61aPcVW>d4)swCk%d2g2vBw z*0vC&Ef2h#BklnAA8*@f9WM9o*POSyxD)>VxFC%r&&y6l#}n-@HET{ake!JSx*Aqf z99@?|eif@>cjhVsqeIfgf4E+CNZ5W1SGplB?qDk)d&Ndt-xj0ZIc%`dZ`1GW_6#%3 zxquURw!?-h>cL{wm%XRP3~=D`)xow@W^-K&zYRpBlzL77gAEqZo(p|Jqj`fk~b-26W(`x(hO4XqT8i9N7QZ zUBE+He&_pm9{NBBM_rsKdf$`>Jg{RcJl8@O(M^4B>M8C9+BHe3Rs3 zrf|5rk?(&x9AfN?ARutO%|{FHoVgbXemmaU*T}x3;dOK*X?prP01;$HTpb<>I&X_% zTf?=#hOCiL&K$H$>|KCS&+Uy_A0T3Y_NH~u+ZWIjavR`lN;y6ZI(n*OvN`JpXkor+ z#mZ$ja4N>GM{S_w2?AVWdES<5^7Y#Ev|$LdD%&TMX1mFk@n~6jqFI2zfXbU@n}9Le z))@!1o3BD;=Y?Y0z2^bh_0y0#(mPi|3<dDaPH(P!( z`c+I)YVdWX14A}TE}0Pd-=ygf@8M}T^|c_a7btrRwO6OWc4-}sEqT~$qLhS zclT-P%jU5C$GYd*W;IIdc`2&}%Z0@dm0{R&kh3ba#5nwYPLB z;o;{&ZJQI3b!GJgEJ9hyS<=l;O88B!uJc4)~(P)f1ns z247${Ks)m83=P$0_}b;c{*6_m3*0V=T0iwsq0MP(d9Ow;4If1CIZZ}zT;OmiRxghA z$a?y1!&WAOUxxAF)Bay>sGerbjID!s<<2$&RgdxCXx+wPIdrBkXqeY&I-o#Q9<&L3{pZrMLj)Sm)Y4(dDUD#ZCL;v7OZ1rd@3a??IgNeZRK0kD>xoO|R5ix85+%4kj5lxq<7M zj@KHrYoTe3!d!i}TKfWy;DVEYp@$scGVc3zLpBIh z`K7EnAJseb$G#J(k_E_0z>7l!c{~g(OWKdei#eCyNL+9vp zd%b%3B%gAYww6U%MfFs)(Kt=E>L*rm&q-;Av1-j#Xo98`*NPn!DhA7cxsDBJ^Hg8Ye8 zf&Fw)k)nL`H92F~_{QWdc4ivhn-WigY+`RaVAsG!U8pSgvhOSP6H?u|`kyz0aTt=m z@?HU~(fB|~nZ1_2L7c+QcNmwO%fm*eEJ z=ZRN`2$l0C@RA+?R69H~+Z5{VzKLB=q5}#^WPYHXji0i@&b_z_B#|tIgODFm`Z{4z0 z^o}yi3l3JhW%6li^*Ft5mQqeUW^R3_Q4Wc7%wn%J93?LueZ`GdbQ_`8V!uQ46Hb-3 zo>-Bsa{9vU>_Grvr6jn)4hZiPk|p5Rwg$cQ+Ld;CAnjy|?bIOCMb2t5!)sQzVf^(h zh)PdgU_7`v`pw(Uwewsdd!E2swQJY10)jknKfZWnxz1W1IB*mraqo_jF;$pN04E(> z4v83v>?OnWy`g9|{Q5mw-xvhVMJcr$KMKa`RJrlbwica#_@A;T%>L^zta5kT@d5|P z!Gp3ciOGhxeW)a$KY8*<3Z!kizXFvM|Pjh?zv~^7Iv*UjAQR z#H3x}?O6E6>agXR>^Ocq$<t50^9+A+(*fMhLeT&cM|H&l`?v^9Md zR+B74JwMc!^YGxXQ5CwJrSUoAWV+cPwd?H79kMo{A0Wd^ zP&?Se6$e^`Pz!Zv3mdeUB0KmDkPZu;DuM|0`g&}?=rWzV^!#Aaax~j@T?h65M`apVo^;2K(ll4|_2I`h(1;5D4oKyyAsVX1s*_HAl9pn&K|>JeX{uS~ zSfnt>9F(DETt(FW*w@{)N(UTGBQLJ*ZdTx-(tc8UH(wUUmE3;{GLAU9ohGSzaKZ=uXsayIT0h+xU6>e$2xs&siE zHBC2SxL{(`JQbe~5rgXyngT9xvB{_S({LGg9Rt3`u+31p{G%%K0g3`Q?0FZwC;EE_ zuK|B*Gs+U5XLi6-1Q-H`LT-r7Hz}@CQPH75nnD-IZ`Cn%cotf?zO~$HHv)wat26FAoZ5m_nw4AMk-c8L(v>%?(1G&_+ zg^HqjcxwKE{H%jP_g?=+8&rv6Ro?;OogN};5TtW5uSxJP+5*61LN_lGeEv(2Lv`St z;qyNn88F@mqAi27(G^cy@Cz_V;yUNizi5MmBAHxNjX>LF@Y_F~_ul_S8#L)+aR)P= zwtk2<>g6V_zi3MVkHxZF#FyuaT)G5V;o*jO4`>hbL}nmxG-kO$i$L33FsPoFb6*kH z0U|vB*U*M`-jyfN2Fe;}FO!Q!{6(8L7;p8dgOR{DC?A}ev)T18+Mvg1uU{n8CtMPN z`1a9|P%HAAc_Ky-ZGL$Tf&|(iR7OIAbJqs{J+&S{25Daf-IXBF1}t@24n?t#zaJp{ z6zvA4>9mj}q}uC?|8PHW;K0rfX?$zZzuj==ki_BSVsy2O!eVmw4u8K-F+(FSl6Lk^ z+VkgcE_ERKrprHl=tz>x;#LwVRia?IJtM<(LQ?*4$TfzAreEmD@jyf)LzvV$dRfHY z0Q@IR{%|3z8C*lHPXGNJmTkriE8LrIXx$O~bMzkp-_QKC zG2W+Z4+jF^R4`TCV;Mim3kcZa4WMjyeqq2ZqNU}MQDxIH99dG<(72Qbwb zGlUKBv>dYl>-=R z9Qg%O?2x1aB={JC4;+m7H?J{67SJ z>?PidrzKDme6@OSk6kPM_bcDog7Fdttr7UgzJl{gaI5wm^PVq>2jVV$0goL|9upyu z`@$oJ=fAst|9zP}bOKa+wI<;uV+}yUXr9Z2YCD4H;U6Tc0B;(F*{={JV+Ke@klU&0 zzuqPRLLaeDSEBK7>?I-~!B=(3N)GR37ewS4pgv>e`1}bTtVp=m{~)X#BCI)~wSYhv za}~}1e~yKF38oGoBJmdWr-88*4O!qUWRyi0FdMYS1`$gNJjGyV`?b`I%qI%i zU_fF#fiEr95X{5?%IqcjPq*N!+y3RX5WvJYJ;am=>=-&+?1el{&%pz74e6+O+@6~v zOJ(dAhOhF!?UG7UN=>w$5Kk0ao>WLvsz0vR$7Y)>QkBz_ zrD%xkDgAx=`id8+*C+ZoN?6SX&X3V#Qu6B0-gX-EyPUj9e(i10g#cyJUa5~Gzoqrq zy%3;Cluq+d;x|7T1Rovnf*YHEd*wIVGOS`f(LhnMKH0VO(>Es3HdR3(TlXNBOcO_c z={#|SklCv_VM`H(#0PBOhMhEKyPdz9zwtmO`-F%1)93^zHHJ32&ay2On5c?vp_TUz1t8*lsg4Jx>(?_nL0Qnz!+(>~Vs#PX%<9r~kldcxN= zf9t6OMDoy?pLD2IA1{!H?*YDEdOJ+LK0UVHQSL0Os5kDT$L5fXpi4?QZ8Vga%H-zI zbUjrurBE$^RksqpnpTPud`T}A+EiY`TLdyLMtB!)^~|HZRW|abVc1pgqdBaLsbe#1 zA}j3S^XgNQhE?c=)oWdRA8XZmQS;p+sP_45DkEj95!QRQ(-j#&M#ueN6yEVYmJGhf z6$r&094e0mcVX${Hn?(Lb@Q9Le7GmkPAclUwa9-9-u0jphV=kEjjBT|_y_roxLkF{ z%yD%#j5mZx@!K1+a~TVq8+!vvyRP_BvcG>z#R(*Oq2A}8gr}fH(E3*`U6Nh;IjBxA z>`5q_*0qgR{}@>JS?*c}am<`T@dLfobfO(l%vRD>zzqP2>&&59?=E5|-f<*|zuwl> zi!gpNm5H>TY@z~pSAm>T6&Y=(35LxU7cGPOz@%Kon5m%>n?OFBXG}Vo(YEs&ku&Mt zg`4S^^McRbLWP`|g+cbB6j^oiyu0_G@IuGG1)05q5-aR&xO(7tW ztwDBHgCdMwD^S2``9V&+Skgn}fI_CJTDmg^HDHH&+Ev&7%o!wE&R$OGpLcCxKJMgx z(2HL#Kz6u4ZW=t{pjXj>Dmk+oVTn1B;@bY6q@$ z;8<-yBgnwLCZqf=lXA+V+-mH8t{sZIAK?&JTL`yZNWP2gVcR@<>LNX;&5L01>v?AV?AzIRoCqbSGW{_RJH6^XOZH=?mMC-s7x4$PA)CgGscz7 z6>(cnmdOf5?BuM_-4qepae1vgw*>dzxTIVCCdnFPP!$KGPSc#LTxu}6cHKWmkwRd@ zP?=(hBuvAiyt~spOaHi$L(d#vjT8?*fQOwbB%Xv}bWj~KLb#Pz-{#af$3cE`M?nB>5vZ!U06#kk{E!)_b? zdb@t0resLHxApk+NTtqO6mBl>$kMEdmP`RfW7vb?GN%mDrgY&2cK59Mq^qWTPBjk? zU!W>a67Tx?YXFu(lZRP^fW)yVE&2L1v}F%zKZ|l&Vt;q4 zqJdgGn!i`d>!_^cx1*<}AEfOVpu9+hgT;K$MY*oVI%?ieBO7$eA+py>PDuw%GD4J6 zHPw(MF=8Yad9Nqj4|qR6=)g-CkM7HSEWM(&P#fG0vLv2Hl%CXP2RGK`pQ2iNCFP0} z=`-#&2}gC|K%GOFz%LOiE(_dciaPhpipdX`;h&{M&8d%@^^RITNSKPO!`D%d#6Il# zy#2M}s^*AR)>Kz-BdAijDmv_fbm1HYu@D~pd6;dW>nz&2{Ik~bOQ&udG%P^l?&gHh zuzq8(yaPs<{pAUYv$)tU2d^wOL`$?{fMP2xvbl6s6@j67n?llou%CHcBjMhco}M~B&5<8kOl0pqth22h)Ge;P*ZjH!DKcqtNdh|HQ{-{txTv{2=}|l09eIc6 zu&xy*5-zisqRrIkVwd&YF;Fq;4-Q^fml6#Lg$S(cHa!U!?&VnB`viYMXUvQ5TmT$W z_20Cf#FoPcYg?nR6^%mWA8XU3BbMxAR5Au@J|)za zYzLi|jv=PILGz?i=)R8o`iTJEZMm`eibuT>j1~uLvnp|u6@#ck;rUsthUfE_GL@zF z^X4rdN7B2~dvELOH>y}}fy05L1^H2wF|Se~DUAc8cI5bc*u;m76-U%IFZ;%b+{BH5 z$Yo)bgwSQSTA&6mIxUU!Yz{j<@qy?;n>z$wm+zQc=*jSIbh9g}VCtPhR=QU<3b~Ky zY-CnmcYE-5qSU zW3;mJ2-}A&gXqi~O7u3}Ea*ljtdZSDaV-zs$1CmU2RFH zGd3(psEm8tcQ_4LH$;!n49yCI47Ib**juVwb)l>ygNT?EpGA8TL7ArM_JznNg=R>Wna&Y&I*SaKUthdC@>J>aN}jDs z)<oHM$K&u|rsZrlf1B54Z_Yy!q^%eold>1Ck!JyXkr!CgBt-B>fUn?24!6*q zFSYB4ul6JMe;CdCkTzW#={)fW!%I9T=xnRF9EA}2-o=00VwlK!VpiFxy)0s7esJ&x z_i`S}J9@TSaV=x&2)kO^+y0%6A9v#Ep3a(qMh>q|x#4PtrZtL815Z(PM5Qer@2h=F z#e7xVk9!q6kE9s8lM45?$u5I;OP1_xQ{yWLnG{oGcxr*2(ohE9kdl#kOnX8j)0ArU zV-1U}vStHOHyQx$NzXD$<16@$1}dk}2>po$eGb}7#xVk!9>_SiYR0!J4r`#v!c}Pp zd()BGj@GQo;Sa+_8BNX-sT?Y*R#8QK|<5m;gUhTtCk;xhQjzC(-KOV~(F{)RuW zqhjCzAS|;9tqVM40i%Sh)>YQ)-d_bZ$XqsU9^0UkfLeYuWsos#?cT==T7d?(ZFmApi$u!qJy zj?%7CADrJ>Tyn%O{KR)IwcaW`==HB{u<#1Q^+&4BVr=Wnl!589 z1v02mU{D6|YV?7wO4BemkTuMzoTkLRN)FRiT{f3``G%)uwPjE=>5f-Q8OEk1+Nq;R z$34$|tR`!G*cr`%QmKmNHdE)E@JTtkb-WLjD(C+C1a|e7(N9O&W<>CeTd=Z2PHn;A zG%cK-WV5>6ct;YoL$*m61#@WW5EXhT3_6N7^k23Q3(2+Pe8BZs8)=g}VW+9N>wx{H z-yF#`Id~AR0|4fG?&pITWogsXb{9L&)lc*6$X+Z6AagK_U8na9fDK|T5sox!Nyc1! zE^9vHb+KA2nuEafU4}=;HX?!}(m! zSB@71h`u@%g1sgiqS2Z79&{ZUTs;HR?X@XF@eKi5t~p~t7eoj9OQ9n9>9|-|3}1h~ zlW)YsiJ_9p@rBBrP=i?W>!RKjGdWRKN9Mqm&-rSI^L$Uz?!1a-R?XCW4_v#j}dt$MP+AZs|e%<}zDwuu(%8@IXb@@tc%!lE7e zQFJbA@3p2tQD6TAXsA%o7{;oj7q*Ew<71y96J?H-30Q1W%bTBHMOCi!Rg=*0NAQEH z^VQ-JpaBfZYW=A#u=0XKJ?L*=U;19W(PV$h6=jBKaust8f9&7=Bx8iU2f7Hg-z=@< zSH|Pz*@ex=x zvM}9JnTN7FNAUCFl|}9@enswx(zF~zY}38Bo?wprvG`s*jkn8|ine}rr);`S-Mf|l zy0A0mvljdLgPZYUaf74NL=?Gj_2_R4;Id?dlEj>c)=mKO8)+D)>*ozaJIHF#Y_Tw# z_Rx@V|G6qklpeb}Yk@E}J}-{9No)->DRFMVU8JUa6wIpeSB$I7BBa6%flKB+ay4<;B*L1H`PNa;xN;Y_AB_Ud-};c{q=V zW;v6PBkc1kPRk`cGpj`-o##BT-(Lrj zxH6WY5t*F8c;_~t<6ro; z0%h`p_nN~_o2;PsP^^}C7Cq+TTu;3}oiH2R{MS6pKJp4Ojzulkhpp0nzLbesyDa=I zHSGQ^5JaSTrcLflVvlF#;m}bMZW%0UP$QDZV$%A8$*`psuT9PE)JHkb%iTdGx6?*CIk*+ z3;DNHJZLS1zqZ7K%FoN!RxYQExK~OH<7)Pr(z=B=4_~cVrm4wK8xnB z)FG={nr9k26J{j#>CXvX+3caLJ)qJhGDQ!*z9*4#gy4(_l@GZn}KU#A28y-Y)XF#s1eM!NY&mLNFvchH7Ao7`OJ9DcYR}gC2pDP(NP%r^i z zeRfGNDk_PrWY}W#|HzjCJ-+Oto>LGMf(wAJu@NjciMIfXWj)=dClPnKe8{;~knM|! zZp#mMX8t~5m$mE@nKo}K28FuLaV5REsDM)>l@8IwP6ggJGC%%+l002YHm1|z1-R{~ zb*>=_{&_F4QSAWbKtXH`SetNM7*6M=3xUvqdsnLTQ9Khf{J)2;9eRy z6B7Mddhv%k*(m`2>0Y-X*#l1Dy|=rd3z^_O;#cN)jPk`xFzC@K@)$y_>vz8BB`W|H zlh=l*;I~CQz|;l#Ya-J3KUS3hHjntZ6T6!Siv5*^fBGv__7qAMoh-Ii#>>?g5ZodK zXAmJdWY3)RK(s`yA5G))_C>;hapqkw(k`=q31=W`IFyXYp+o+XIv_MbKe6QD{>KEs zcxRE1$MB|rrz0Stmi&$JUde`l;Cu0aW_te{y?CO@SRl4Z*!)qE4tZyH<-nYWiC+?+ z-4}jfP~RyE8bWWtJxllnOes&EBr%8>&uOsGfY_YLUET8A%iHhA0I$a4#*O{4J~Aip zviCg6n*Ts5TjUp5sFy)=1i=aa{jy_xfaZ79XZQ N*D-F{^ISI0OJ5Tzkj560lf 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 R*MNVQFKD07Ifwk?{{ew8sb2s9 literal 0 HcmV?d00001 diff --git a/docs/openfaas-pro/sso/cli.md b/docs/openfaas-pro/sso/cli.md index 2058ecd1..c8e7fcf3 100644 --- a/docs/openfaas-pro/sso/cli.md +++ b/docs/openfaas-pro/sso/cli.md @@ -12,7 +12,47 @@ You'll need to start off by installing the faas-cli and the pro plugin. See: [CL Now you can log into the gateway using one of the defined JwtIssuers for your installation. If you have not defined a JwtIssuer yet, then see the overview post here: [Walkthrough of Identity and Access Management (IAM) for OpenFaaS](https://www.openfaas.com/blog/walkthrough-iam-for-openfaas/). -If your IDP supports Proof Key for Code Exchange PKCE, then you can use the OAuth code flow: +The faas-cli supports several OAuth 2.0 authorization flows for obtaining a token from your IdP: + +* `device_code` - Device authorization flow. Intended for authenticating a CLI on headless or remote systems. +* `code` - Authorization code flow with PKCE. Interactive login that opens a browser on the machine running the CLI. +* `client_credentials` - Non-interactive, server-to-server authentication using a client ID and secret. +* `implicit` / `implicit-id` - Legacy implicit flows, kept for compatibility with older IdPs. + +Select which flow to use by passing its name to the `--grant` flag of the `faas-cli pro auth` command. + +#### Device authorization grant + +The device authorization flow lets you authenticate without a browser on the machine running the CLI. It prints a verification URL and a one-time code that you open from a browser on any other device to complete the login. This makes it well suited to headless or remote machines, such as a server accessed over SSH. + +```bash +faas-cli pro auth \ + --grant device_code \ + --client-id CLIENT_ID \ + --authority https://oidc.example.com \ + --gateway https://gateway.example.com +``` + +Open the printed verification URL in a browser on any device, enter the code, and complete the login with your IdP. Once you have authorized the request, the JWT is exchanged for an OpenFaaS access token, and the CLI is ready to use. + +If the machine running the CLI has a browser available, it will be opened on the verification page for you automatically. To disable this and only print the URL and code, add `--launch-browser=false`: + +```bash +faas-cli pro auth \ + --grant device_code \ + --client-id CLIENT_ID \ + --authority https://oidc.example.com \ + --gateway https://gateway.example.com \ + --launch-browser=false +``` + +!!! note "Your IdP must support the device authorization flow" + + The device authorization flow can only be used when your Identity Provider supports it. See the [SSO overview](/openfaas-pro/sso/overview/) for the supported providers and flows. If your provider does not support it, use the OAuth code flow described below instead. + +#### Authorization code flow with PKCE + +With the authorization code flow with Proof Key for Code Exchange (PKCE), the CLI opens a browser to sign in and starts a local server to receive the token on the callback URL `http://127.0.0.1:31111/oauth/callback`. This URL needs to be registered as a valid redirect URI on your IdP client. ```bash faas-cli pro auth \ @@ -21,15 +61,11 @@ faas-cli pro auth \ --gateway https://gateway.example.com ``` -A browser will open and you can log in using your IDP. - -Following on from that, a JWT will be exchanged for an OpenFaaS access token, and the CLI will be ready to use. - -Whenever you want to log in again, you can use the `faas-cli pro auth` command, and you will not need to add the `--client-id` flag or `--authority` flag again, since they will be saved for you. +After receiving the token from your IdP, the CLI exchanges it for an OpenFaaS access token and is ready to use. ### Log in to refresh your SSO token -If you have already logged in, then you can refresh your token using the `faas-cli pro auth` command: +If you have already logged in, then you can refresh your token using the `faas-cli pro auth` command. Your settings are saved after the first login, so you will not need to provide all of the flags again. ```bash faas-cli pro auth \ diff --git a/docs/openfaas-pro/sso/google.md b/docs/openfaas-pro/sso/google.md index 9f135514..c124931f 100644 --- a/docs/openfaas-pro/sso/google.md +++ b/docs/openfaas-pro/sso/google.md @@ -12,16 +12,28 @@ This guide will cover how to configure Google as an identity provider for OpenFa 3. Obtain OAuth 2.0 credentials - You will need to obtain a client ID and client secret for OpenFaaS. Create new OAuth Client ID credentials under *APIs & Services -> Credential*. + There are two possible client credentials setups: + + - A single *Web application* client shared by both the dashboard and the CLI, using the [Implicit Id flow](#implicit-id-flow) for the CLI. + - One *Web application* client for the dashboard and a separate *TVs and Limited Input devices* client for the [Device Authorization flow](#device-authorization-flow) with the CLI. + + Create new OAuth Client ID credentials under *APIs & Services -> Credential* for each application type you need. ![Google API console OAuth 2.0 credentials](/images/oidc-configuration/google/google-create-credentials.png) -4. Add the callback URL for the CLI and dashboard to the list of valid redirect URIs. + When creating the credentials you are asked to select an application type: - Add `http://127.0.0.1:31111/oauth/callback` for the CLI. If you are deploying the OpenFaaS dashboard, add the redirect URI for your dashboard e.g `https://dashboard.openfaas.example.com/auth/callback`. + ![Google API console select application type](/images/oidc-configuration/google/google-application-type.png) - ![Google API console add redirect URIs](/images/oidc-configuration/google/google-redirect-uris.png) + Each client has its own client ID and secret. All client IDs will need to be added to the `aud` field of the JwtIssuer in step 5. + +4. Add the callback URLs to the list of valid redirect URIs on the **Web application** client. + - For the dashboard, add the redirect URI for your dashboard e.g `https://dashboard.openfaas.example.com/auth/callback`. + - For the CLI, add `http://127.0.0.1:31111/oauth/callback` if you intend to use the [Implicit Id flow](#implicit-id-flow). + + ![Google API console add redirect URIs](/images/oidc-configuration/google/google-redirect-uris.png) + 5. Register Google as a JwtIssuer with OpenFaaS Create a JwtIssuer object in the `openfaas` namespace to register Google as a trusted issuer for OpenFaaS IAM. @@ -37,26 +49,49 @@ This guide will cover how to configure Google as an identity provider for OpenFa spec: iss: https://accounts.google.com aud: + # Dashboard - client id of the Web application credentials - 156723843784956-dkebg39ro687we10ad39756kflrtpzsan.apps.googleusercontent.com + # CLI - client id of the TVs and Limited Input devices credentials (Device Authorization flow) + - 156723843784956-zsan39ro687we10ad39756kflrtpzdkebg.apps.googleusercontent.com tokenExpiry: 12h ``` The `iss` field needs to have the value `https://accounts.google.com`. - The `aud` field contains a set of accepted audiences. For Google this is the client id that was generated in step 3. - The client ID and secret can always be accessed from *Credentials* in *APIs & Services* in the [Google API console](https://console.cloud.google.com/projectselector2/apis/credentials?supportedpurview=project). + The `aud` field contains a set of accepted audiences. For Google these are the client ids of the credentials that were created in step 3. Add the client id of the **Web application** credentials and, if you are using the CLI Device Authorization flow, the client id of the **TVs and Limited Input devices** credentials. + + The client IDs and secrets can always be accessed from *Credentials* in *APIs & Services* in the [Google API console](https://console.cloud.google.com/projectselector2/apis/credentials?supportedpurview=project). The `tokenExpiry` field can be used to set the expiry time of the OpenFaaS access token. -!!! note "SSO with the faas-cli" +## Login with the faas-cli + +Google does not support the Authorization Code flow with Proof Key of Code Exchange (PKCE), so to login with the faas-cli you can use either the Device Authorization flow or the Implicit Id flow. + +See [SSO with the faas-cli](/openfaas-pro/sso/cli/) for how to install the CLI and a full reference of the available login flags and flows. + +### Device Authorization flow + +Use this flow if you opted for a separate client for the CLI. It uses the dedicated *TVs and Limited Input devices* client created in [step 3](#configure-google) and requires the client id and client secret. + +```sh +faas-cli pro auth \ + --grant device_code \ + --authority https://accounts.google.com \ + --client-id CLIENT_ID \ + --client-secret CLIENT_SECRET +``` + +### Implicit Id flow + +Use this flow if you opted for a single client shared by the dashboard and the CLI. It uses the *Web application* client created in [step 3](#configure-google). - Google does not support the Authorization Code flow with Proof Key of Code Exchange (PKCE). - To login with the faas-cli use the Implicit Id flow. +The CLI opens a browser to sign in and starts a local server to receive the token on the callback URL `http://127.0.0.1:31111/oauth/callback`. This URL needs to be added to the list of valid redirect URIs on this client (see [step 4](#configure-google)). - ```sh - faas-cli pro auth \ - --grant implicit-id \ - --authority https://accounts.google.com \ - --client-id CLIENT_ID - ``` \ No newline at end of file +```sh +faas-cli pro auth \ + --grant implicit-id \ + --authority https://accounts.google.com \ + --client-id CLIENT_ID +``` diff --git a/docs/openfaas-pro/sso/keycloak.md b/docs/openfaas-pro/sso/keycloak.md index 42ea5c81..29a4a8e7 100644 --- a/docs/openfaas-pro/sso/keycloak.md +++ b/docs/openfaas-pro/sso/keycloak.md @@ -6,14 +6,20 @@ This guide will cover how to configure [Keycloak](https://www.keycloak.org/) as ![Keycloak client general settings](/images/oidc-configuration/keycloak/keycloak-general-settings.png) -2. Enable the **Standard Flow** (Authorization Code Flow) for the client. +2. Configure the authentication flows for the client. + + Enable the **Standard Flow** (Authorization Code Flow) for the client. ![Keycloak client authentication flow settings](/images/oidc-configuration/keycloak/keycloak-auth-flow.png) + To allow logging in with the CLI using the Device Authorization flow, also enable the **OAuth 2.0 Device Authorization Grant** option. + 3. Add the callback URLs for the CLI and dashboard to the list of valid redirect URIs. Add `http://127.0.0.1:31111/oauth/callback` for the CLI. If you are deploying the OpenFaaS dashboard, add the redirect URI for your dashboard e.g `https://dashboard.openfaas.example.com/auth/callback`. + The CLI callback URL is not required if you only intend to use the Device Authorization flow for the CLI. + ![Keycloak client allowed redirect url settings](/images/oidc-configuration/keycloak/keycloak-callback.png) 4. Register your Keycloak provider with OpenFaaS @@ -42,3 +48,34 @@ This guide will cover how to configure [Keycloak](https://www.keycloak.org/) as The `tokenExpiry` field can be used to set the expiry time of the OpenFaaS access token. +## Login with the faas-cli + +To login with the faas-cli you can use either the Device Authorization flow or the Authorization Code flow. + +See [SSO with the faas-cli](/openfaas-pro/sso/cli/) for how to install the CLI and a full reference of the available login flags and flows. + +### Device Authorization flow + +Use this flow to log in from a remote or headless machine where no local browser is available. It requires the **OAuth 2.0 Device Authorization Grant** option to be enabled on the client. + +```sh +faas-cli pro auth \ + --grant device_code \ + --authority https://keycloak.example.com/realms/openfaas \ + --client-id CLIENT_ID +``` + +The CLI prints a verification URL and a one-time code. Open the URL in a browser on any device, enter the code and complete the login with Keycloak. + +### Authorization Code flow + +This flow is an alternative to the Device Authorization flow. It requires the **Standard Flow** to be enabled on the client (see [step 2](#configure-keycloak)). + +The CLI opens a browser to sign in and starts a local server to receive the token on the callback URL `http://127.0.0.1:31111/oauth/callback`, so this URL needs to be added to the list of valid redirect URIs on the client (see [step 3](#configure-keycloak)). + +```sh +faas-cli pro auth \ + --authority https://keycloak.example.com/realms/openfaas \ + --client-id CLIENT_ID +``` + diff --git a/docs/openfaas-pro/sso/overview.md b/docs/openfaas-pro/sso/overview.md index 6be8efdb..2cdf71a7 100644 --- a/docs/openfaas-pro/sso/overview.md +++ b/docs/openfaas-pro/sso/overview.md @@ -16,6 +16,7 @@ To configure your identity provider: Authentication flows supported by the OpenFaaS CLI: - Authorization Code flow with Proof Key of Code Exchange (PKCE) - (recommended) + - Device Authorization Grant - Implicit flow - Client Credentials flow @@ -24,13 +25,13 @@ To configure your identity provider: - Authorization Code Flow - Authorization Code Flow with Proof Key of Code Exchange (PKCE) - For the CLI we recommend the Authorization Code flow with PKCE. One of the other flows can be used if your provider does not support PKCE. + For the CLI we recommend the Authorization Code flow with PKCE or the Device Authorization Grant if your provider supports it. One of the other flows can be used if your provider does not support PKCE. 3. Configure allowed callback URLs. The dashboard uses the callback path: `/auth/callback`. If you are deploying the dashboard allow callbacks on your dashboards public URL, e.g. `https://dashboard.openfaas.example.com/auth/callback` - For the CLI the default callback URL is, `http://127.0.0.1:31111/oauth/callback` + For the CLI the default callback URL is, `http://127.0.0.1:31111/oauth/callback`. The CLI callback URL is not required when using the Device Authorization flow. 4. Register your provider with OpenFaaS From ff5753759015ad5f3eb8ed5277927017a50b9a9c Mon Sep 17 00:00:00 2001 From: "Han Verstraete (OpenFaaS Ltd)" Date: Thu, 11 Jun 2026 19:19:52 +0200 Subject: [PATCH 2/2] Standardize OAuth terminology to 'Proof Key for Code Exchange' Signed-off-by: Han Verstraete (OpenFaaS Ltd) --- docs/openfaas-pro/sso/google.md | 2 +- docs/openfaas-pro/sso/overview.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/openfaas-pro/sso/google.md b/docs/openfaas-pro/sso/google.md index c124931f..ca52ef7a 100644 --- a/docs/openfaas-pro/sso/google.md +++ b/docs/openfaas-pro/sso/google.md @@ -67,7 +67,7 @@ This guide will cover how to configure Google as an identity provider for OpenFa ## Login with the faas-cli -Google does not support the Authorization Code flow with Proof Key of Code Exchange (PKCE), so to login with the faas-cli you can use either the Device Authorization flow or the Implicit Id flow. +Google does not support the Authorization Code flow with Proof Key for Code Exchange (PKCE), so to login with the faas-cli you can use either the Device Authorization flow or the Implicit Id flow. See [SSO with the faas-cli](/openfaas-pro/sso/cli/) for how to install the CLI and a full reference of the available login flags and flows. diff --git a/docs/openfaas-pro/sso/overview.md b/docs/openfaas-pro/sso/overview.md index 2cdf71a7..9287f709 100644 --- a/docs/openfaas-pro/sso/overview.md +++ b/docs/openfaas-pro/sso/overview.md @@ -15,7 +15,7 @@ To configure your identity provider: Authentication flows supported by the OpenFaaS CLI: - - Authorization Code flow with Proof Key of Code Exchange (PKCE) - (recommended) + - Authorization Code flow with Proof Key for Code Exchange (PKCE) - (recommended) - Device Authorization Grant - Implicit flow - Client Credentials flow @@ -23,7 +23,7 @@ To configure your identity provider: Authentication flows supported by the OpenFaaS dashboard: - Authorization Code Flow - - Authorization Code Flow with Proof Key of Code Exchange (PKCE) + - Authorization Code Flow with Proof Key for Code Exchange (PKCE) For the CLI we recommend the Authorization Code flow with PKCE or the Device Authorization Grant if your provider supports it. One of the other flows can be used if your provider does not support PKCE.