গিটহাব এপিআইতে মৌলিক প্রমাণীকরণের জন্য একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড সহ ইনভোক-ওয়েবরয়েস্ট ব্যবহার করুন


127

সিআরএল সহ, আমরা নিম্নলিখিত হিসাবে একটি HTTP ওয়েব অনুরোধের সাথে একটি ব্যবহারকারীর নাম পাস করতে পারি:

$ curl -u <your_username> https://api.github.com/user

-uপতাকা প্রমাণীকরণের জন্য একটি ব্যবহারকারী নাম গ্রহণ করে, এবং তারপর কার্ল পাসওয়ার্ড অনুরোধ করবে। সিআরএল উদাহরণটি গিটহাব এপিআই সহ বেসিক প্রমাণীকরণের জন্য ।

ইনভোক-ওয়েবরয়েস্টের সাথে আমরা কীভাবে একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ডটি পাস করব? চূড়ান্ত লক্ষ্যটি হ'ল গিটহাব এপিআই-তে বেসিক প্রমাণীকরণ সহ পাওয়ারশেল ব্যবহারকারী।


$ জোড়া হওয়া উচিত $pair = "$($user):$($pass)"অনুমোদিত উত্তরটি চেক করুন। আমি
উপরেরটি

-Credentialঅনুরোধ করা হয়ে গেলে যে সমাধানগুলি সঠিক লেখক শিরোনাম হিসাবে কাজ করার পরামর্শ দেয় সেগুলির কোনওটিই উত্পন্ন হয় না।
স্টিংজি জ্যাক

@ শন লুটিন - এটি একটি প্রশ্ন ..... এবং উত্তর সাইট, একটি প্রশ্ন উত্তর সাইট নয়। এই এক ব্যবহারকারীর সম্ভাব্য প্রশ্ন হিসাবে একটি সংযোগ দেখতে পছন্দ করবেন এবং আপনার নির্দিষ্ট পরিস্থিতির জন্য কাজ করা ছাড়া অন্য উত্তরগুলি দেওয়া উচিত, তবে এটি দুবার পড়তে হবে না (একবার সম্পাদিত প্রশ্নে এখন প্রশ্নোত্তর আসুন, এবং তারপরে পুনরায় উত্তরে)। যদি উদ্বেগের উত্তরটি আপনাকে প্রশ্নের নিকটতম না হতে সাহায্য করে, তবে ইতিমধ্যে প্রশ্নটির যতটা সম্ভব উত্তর / গ্রহণযোগ্য উত্তর আনতে স্ট্যাকএক্সচেঞ্জের কার্যকারিতা রয়েছে।
ব্যবহারকারী 66001

1
@ user66001 মতামতের জন্য আপনাকে ধন্যবাদ। আমি আমার উত্তর-উত্তরটি পরবর্তী রেফারেন্সের জন্য তার নিজস্ব উত্তরে সরিয়েছি। আমি মনে করি এটি একটি উন্নতি।
শন লুটিন

@ শানলুটিন - দুর্দান্ত ধারণা! :)
ব্যবহারকারী 66001

উত্তর:


147

আমি এখানে বেসিক প্রমাণীকরণটি ধরে নিচ্ছি।

$cred = Get-Credential
Invoke-WebRequest -Uri 'https://whatever' -Credential $cred

আপনি অন্যান্য উপায়ে ( Import-Clixmlইত্যাদি) এর মাধ্যমে আপনার শংসাপত্র পেতে পারেন , তবে এটি কোনও [PSCredential]অবজেক্ট হতে হবে ।

মন্তব্যের ভিত্তিতে সম্পাদনা করুন:

আপনার প্রদত্ত লিঙ্কটিতে তারা ব্যাখ্যা করার সাথে সাথে গিটহাব আরএফসি ভঙ্গ করছে :

কিছু সামান্য পার্থক্য নিয়ে আরএফসি 2617 এ সংজ্ঞায়িত করা হিসাবে এপিআই বেসিক প্রমাণীকরণ সমর্থন করে। মূল পার্থক্যটি হ'ল আরএফসি-র 401 অননুমোদিত প্রতিক্রিয়াগুলির সাথে অনাক্ষরিত অনুরোধগুলির উত্তর দেওয়া দরকার। অনেক জায়গায়, এটি ব্যবহারকারীর ডেটার অস্তিত্ব প্রকাশ করবে। পরিবর্তে, গিটহাব এপিআই 404 পাওয়া যায় নি বলে সাড়া দেয়। এটি HTTP লাইব্রেরিগুলির জন্য সমস্যা তৈরি করতে পারে যা একটি 401 অননুমোদিত প্রতিক্রিয়া অনুমান করে। সমাধানটি হ'ল ম্যানুয়ালি অনুমোদনের শিরোনামটি তৈরি করা।

পাওয়ারশেলগুলি Invoke-WebRequestআমার জ্ঞানের সাথে শংসাপত্রগুলি প্রেরণের আগে 401 জবাবের জন্য অপেক্ষা করে, এবং যেহেতু গিটহাব কখনই একটি সরবরাহ করে না, আপনার শংসাপত্রগুলি কখনই প্রেরণ করা হবে না।

ম্যানুয়ালি হেডারগুলি তৈরি করুন build

পরিবর্তে আপনাকে নিজেরাই বুনিয়াদি লেখকের শিরোনাম তৈরি করতে হবে।

বেসিক প্রমাণীকরণ একটি স্ট্রিং নেয় যা ব্যবহারকারীর নাম এবং পাসওয়ার্ড একটি কোলন দ্বারা পৃথক করা হয় user:passএবং এর পরে বেস 64 এনকোডযুক্ত ফলাফলটি প্রেরণ করে।

এই জাতীয় কোড কাজ করা উচিত:

$user = 'user'
$pass = 'pass'

$pair = "$($user):$($pass)"

$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))

$basicAuthValue = "Basic $encodedCreds"

$Headers = @{
    Authorization = $basicAuthValue
}

Invoke-WebRequest -Uri 'https://whatever' -Headers $Headers

আপনি কিছু স্ট্রিং কনটেনটেশন একত্রিত করতে পারেন তবে আমি এটি স্পষ্ট করে তুলতে চাই।


1
যেমনটি আমি বলেছিলাম এটি বেসিক প্রমাণীকরণের জন্য কাজ করে তবে গিটহাব এপিআই কোন ধরণের প্রমাণীকরণ ব্যবহার করে তা আমি জানি না। কী প্রত্যাশা করা হয়েছিল সে সম্পর্কে আপনি কিছু বিবরণ পোস্ট করতে পারেন এবং এটি আমাদের সমস্যা সমাধানে সহায়তা করতে পারে।
ব্রিটিশবাদী

1
আহ, দেখে মনে হচ্ছে গিটহাব (তাদের নিজস্ব স্বীকৃতি দ্বারা) আরএফসি অনুসরণ করছে না, তবে পাওয়ারশেল is আমি উত্তরটি আরও তথ্য এবং একটি কার্যবিধির সাথে সম্পাদনা করেছি।
ব্রিটিশবাদী

1
হ্যাঁ, আপনি যদি এই ধরণের কলগুলি প্রচুর করতে চলেছেন তবে আমি এটি কোনও ফাংশনে মুড়িয়ে দেওয়ার পরামর্শ দিই। আমি যেমন বলেছি আমি সত্যিই স্বচ্ছতার জন্য সব টুকরা ছড়িয়ে পড়ছিল, কিন্তু আপনি পারে এটা সব এক লাইনে না (এটা শুধু নোংরা হবে)।
ব্রিটিশবাদী

1
@ আরেফ, আপনি যে কোডটি ব্যবহার করছেন তা দিয়ে একটি নতুন প্রশ্ন পোস্ট করা উচিত। যদি আপনি এটি করেন এবং আমাকে জানান তবে আমি একবার দেখে নেব।
ব্রিটিশবাদী

1
ভিজ্যুয়াল স্টুডিও টিম সার্ভিসেস REST এপিআই-র বিরুদ্ধেও প্রমাণীকরণের চেষ্টা করাতে আপনাকে ম্যানুয়ালি শিরোনাম তৈরি করতে হবে
ব্রেন্ট রবিনসন

44

এটা ব্যবহার কর:

$root = 'REST_SERVICE_URL'
$user = "user"
$pass= "password"
$secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd)

$result = Invoke-RestMethod $root -Credential $credential

কোনও কারণে নির্বাচিত উত্তরটি টিএফএস ভিএনেক্সট-এ ব্যবহার করার সময় আমার পক্ষে কার্যকর হয়নি, তবে এইটি কৌশলটি করেছে। অনেক ধন্যবাদ!
টাইবস

নির্বাচিত উত্তরটি ট্রিগারযুক্ত কাজ শুরু করতে আজুর উপর পাওয়ারশেল রানবুক চালানোর জন্য কাজ করে না তবে এই উত্তরটি কার্যকর হয়েছিল।
স্যাম

7

এটি কাজ করতে আমাকে এটি করতে হয়েছিল:

$pair = "$($user):$($pass)"
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Pair))
$headers = @{ Authorization = "Basic $encodedCredentials" }
Invoke-WebRequest -Uri $url -Method Get -Headers $headers -OutFile Config.html

6

Invoke-WebRequest@ ব্রায়েন্টিস্ট উল্লিখিত হিসাবে আরএফসি 2617 অনুসরণ করে, তবে কিছু সিস্টেম রয়েছে (যেমন জেফ্রোগ আর্টফ্যাক্টরি) যা Authorizationশিরোনাম অনুপস্থিত থাকলে বেনাম ব্যবহারের অনুমতি দেয়, তবে শিরোনামটিতে 401 Forbiddenঅবৈধ শংসাপত্র থাকলে তা প্রতিক্রিয়া জানাবে ।

এটি 401 Forbiddenপ্রতিক্রিয়া ট্রিগার এবং -Credentialsকাজ পেতে ব্যবহার করা যেতে পারে ।

$login = Get-Credential -Message "Enter Credentials for Artifactory"

                              #Basic foo:bar
$headers = @{ Authorization = "Basic Zm9vOmJhcg==" }  

Invoke-WebRequest -Credential $login -Headers $headers -Uri "..."

এটি প্রথমবারে অবৈধ শিরোলেখকে প্রেরণ করবে, যা দ্বিতীয় অনুরোধে বৈধ শংসাপত্রগুলির সাথে প্রতিস্থাপন করা হবে যেহেতু -Credentialsশিরোনামটিকে ওভাররাইড করে Authorization

পাওয়ারশেল 5.1 এর সাথে পরীক্ষিত


5

কারও যদি একটি লাইনারের প্রয়োজন হয়:

iwr -Uri 'https://api.github.com/user' -Headers @{ Authorization = "Basic "+ [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("user:pass")) }

2

অন্য উপায় হ'ল certutil.exe ব্যবহার করে একটি ফাইল যেমন আপনার ব্যবহারকারীর নাম এবং পাসওয়ার্ড সংরক্ষণ করুন in.txt ব্যবহারকারীর নাম হিসাবে: পাসওয়ার্ড

certutil -encode in.txt out.txt

এখন আপনার আউট টেক্সট থেকে লেখক মানটি ব্যবহার করতে সক্ষম হওয়া উচিত

$headers = @{ Authorization = "Basic $((get-content out.txt)[1])" }
Invoke-WebRequest -Uri 'https://whatever' -Headers $Headers

1

আমি জানি যে এটি ওপিএসের মূল অনুরোধের বাইরে কিছুটা হলেও তবে আমি মৌলিক প্রমাণীকরণের প্রয়োজন এমন কোনও সাইটের বিরুদ্ধে ইনভোক-ওয়েবরয়েস্ট ব্যবহার করার উপায় অনুসন্ধান করার সময় আমি এটি পেরিয়ে এসেছি।

পার্থক্যটি হ'ল, আমি স্ক্রিপ্টে পাসওয়ার্ডটি রেকর্ড করতে চাইনি। পরিবর্তে, আমি সাইটের শংসাপত্রগুলির জন্য স্ক্রিপ্ট রানারকে অনুরোধ করতে চেয়েছিলাম।

আমি কীভাবে এটি পরিচালনা করেছি তা এখানে

$creds = Get-Credential

$basicCreds = [pscredential]::new($Creds.UserName,$Creds.Password)

Invoke-WebRequest -Uri $URL -Credential $basicCreds

ফলস্বরূপ স্ক্রিপ্ট রানারটিকে ইউ / পি এর জন্য লগইন কথোপকথনের সাথে অনুরোধ জানানো হয়, ইনভোক-ওয়েবআরওয়েস্ট সেই শংসাপত্রগুলি দিয়ে সাইটে অ্যাক্সেস করতে সক্ষম। এটি কাজ করে কারণ $ ক্রেডিটস.প্যাসওয়ার্ডটি ইতিমধ্যে একটি এনক্রিপ্টড স্ট্রিং।

আমি আশা করি এটির উপরের প্রশ্নের একই রকম সমাধান খুঁজছেন তবে স্ক্রিপ্টে ব্যবহারকারীর নাম বা পিডব্লিউ সংরক্ষণ না করে কাউকে সহায়তা করবে


0

এটিই আমাদের বিশেষ পরিস্থিতির জন্য কাজ করেছিল।

নোটগুলি ক্লায়েন্ট সাইড থেকে বেসিক অথিতে উইকিপিডিয়া থেকেসহায়তার জন্য @ ব্রেন্টিস্টের জবাবের জন্য আপনাকে ধন্যবাদ !

একক স্ট্রিংয়ে ব্যবহারকারীর নাম এবং পাসওয়ার্ড একত্রিত করুন username:password

$user = "shaunluttin"
$pass = "super-strong-alpha-numeric-symbolic-long-password"
$pair = "${user}:${pass}"

64 76 চর / রেখার মধ্যে সীমাবদ্ধ না রেখে স্ট্রিংটি বেস 64 এর আরএফসি2045-মাইমে ভেরিয়েন্টে এনকোড করুন।

$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$base64 = [System.Convert]::ToBase64String($bytes)

পদ্ধতি, একটি স্থান এবং তারপরে এনকোডযুক্ত জোড় হিসাবে আথ মান তৈরি করুন Method Base64String

$basicAuthValue = "Basic $base64"

শিরোনাম তৈরি করুন Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

$headers = @{ Authorization = $basicAuthValue }

ওয়েব-অনুরোধ চালান

Invoke-WebRequest -uri "https://api.github.com/user" -Headers $headers

এর পাওয়ারশেল সংস্করণটি সিআরএল সংস্করণটির চেয়ে ভার্বোজ। কেন এমন? @ ব্রায়ান্টিস্ট উল্লেখ করেছেন যে গিটহাব আরএফসি ভাঙছে এবং পাওয়ারশেল এটির সাথে লেগে আছে। তার মানে কি এই যে সিআরএলও মানের সাথে ভেঙে যাচ্ছে?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.