𝗧𝗵𝗲 𝗢𝗽𝗲𝗻𝗜𝗗 𝗖𝗼𝗻𝗳𝗶𝗴𝘂𝗿𝗮𝘁𝗶𝗼𝗻 𝗙𝗶𝘅 𝗙𝗼𝗿 𝗠𝗖𝗣 𝗖𝗼𝗻𝗻𝗲𝗰𝘁𝗼𝗿𝘀

આ અઠવાડિયે મેં એક રિમોટ MCP કનેક્ટરને ઠીક કરવામાં ઘણો સમય વિતાવ્યો.

કનેક્ટર મારા OAuth સર્વરને શોધવામાં સતત નિષ્ફળ જતું હતું. સર્વર બરાબર કામ કરી રહ્યું હતું. સમસ્યા માત્ર એક ખૂટતા રૂટ (route) અને રીડાયરેક્ટ (redirect) ની હતી.

જ્યારે તમે MCP સાથે OAuth નો ઉપયોગ કરો છો, ત્યારે તમે અપેક્ષા રાખો છો કે ડિસ્કવરી ડોક્યુમેન્ટ્સ (discovery documents) કામ કરે. મોટાભાગના ટૂલ્સ આ બે પાથ (paths) શોધે છે:

  • /.well-known/oauth-authorization-server
  • /.well-known/oauth-protected-resource

આ ક્લાયન્ટ્સને જણાવે છે કે ઓથોરાઈઝેશન (authorization) અને ટોકન એન્ડપોઈન્ટ્સ (token endpoints) ક્યાં શોધવા.

સમસ્યા એ છે કે ઘણા ક્લાયન્ટ્સ તે ચોક્કસ પાથ શોધતા નથી. તેના બદલે, તેઓ /.well-known/openid-configuration શોધે છે.

આ એક OpenID Connect પાથ છે. તે એક અલગ સ્પેસિફિકેશન (spec) છે, પરંતુ તે તે જ જગ્યાએ રહે છે. મારા પેકેજમાં આ પાથ રજિસ્ટર નહોતો કારણ કે તે OAuth સ્પેકને અનુસરે છે, OIDC સ્પેકને નહીં.

ક્લાયન્ટ એવા દરવાજા પર ટકોરા મારે છે જેનું અસ્તિત્વ જ નથી. તેને 404 એરર મળે છે અને તે બંધ થઈ જાય છે.

મારી પાસે બે વિકલ્પો હતા:

  1. Nginx માં reverse-proxy રીડાયરેક્ટનો ઉપયોગ કરવો. આ એક આળસુ ઉપાય (lazy fix) છે. તે તમારા લોજિકને તમારા કોડમાંથી બહાર કાઢીને ઇન્ફ્રાસ્ટ્રક્ચરમાં ખસેડે છે. તેને ટેસ્ટ કરવું મુશ્કેલ છે અને ડિપ્લોયમેન્ટ દરમિયાન તે બગડવાની શક્યતા વધુ છે.

  2. એપ્લિકેશનની અંદર તેને ઠીક કરવું. આ વધુ સારો રસ્તો છે.

મેં એપ્લિકેશનને પ્રોબ (probe) નો જવાબ આપવા માટે પસંદ કરી. મેં એક એલિઆસ (alias) બનાવ્યો જે OpenID પાથને OAuth ઓથોરાઈઝેશન પાથ પર રીડાયરેક્ટ કરે છે.

મેં 308 Permanent Redirect નો ઉપયોગ કર્યો.

302 રીડાયરેક્ટ POST રિક્વેસ્ટને GET રિક્વેસ્ટમાં બદલી શકે છે. 308 રીડાયરેક્ટ કડક (strict) છે. તે ક્લાયન્ટને નવા URL પર જવા અને સમાન મેથડ અને બોડી જાળવી રાખવા કહે છે. કાયમી સ્થળાંતર (permanent move) હેન્ડલ કરવા માટે આ સાચી રીત છે.

મેં આને કન્ફિગરેશન ફ્લેગ (configuration flag) ની પાછળ પણ રાખ્યું છે. આનાથી વપરાશકર્તાઓ જો તેમનું પોતાનું OIDC ડિસ્કવરી ચલાવતા હોય, તો તેને બંધ કરી શકે છે.

કોડમાં આ રીતે કરવાથી, હું ટેસ્ટ લખી શકું છું:

  • એક ટેસ્ટ તપાસે છે કે રીડાયરેક્ટ યોગ્ય રીતે થાય છે કે નહીં.
  • એક ટેસ્ટ મેટાડેટા (metadata) માન્ય છે તેની ખાતરી કરવા માટે રીડાયરેક્ટને ફોલો કરે છે.

આ સુનિશ્ચિત કરે છે કે જો મેટાડેટાનું માળખું બદલાય છે, તો મારા ટેસ્ટ તરત જ નિષ્ફળ જાય છે. વપરાશકર્તા કનેક્ટ ન કરી શકે તે પહેલાં, મને મારી પાઇપલાઇનમાં જ ભૂલ મળી જાય છે.

વ્યવહારમાં સ્પેસિફિકેશન્સ ઘણીવાર અલગ હોય છે. ભલે બે સ્ટાન્ડર્ડ સમાન લક્ષ્યો ધરાવતા હોય, ક્લાયન્ટ્સ અલગ-અલગ પાથ પસંદ કરશે. સર્વર ડેવલપર તરીકે, તમારે બંને દરવાજા ખુલ્લા રાખવા જોઈએ.

તેમને એક જ રૂમ તરફ નિર્દેશિત કરો, સાચો રીડાયરેક્ટ કોડ વાપરો, અને ટેસ્ટ સાથે તેને મજબૂત બનાવો.

Source: https://dev.to/nasrulhazim/the-well-knownopenid-configuration-alias-that-makes-mcp-connectors-just-work-27j2