CredStore प्रदर्शन क्वेरी त्रुटि


109

मैं अपने ऐप्स बैकएंड पर एपीआई कॉल करते समय एक मुद्दे पर चल रहा हूं, अब हर कनेक्शन के साथ संकेत देता है

CredStore - performQuery - Error copying matching creds.  Error=-25300, query={
    atyp = http;
    class = inet;
    "m_Limit" = "m_LimitAll";
    ptcl = http;
    "r_Attributes" = 1;
    srvr = "myappsurl.com";
    sync = syna;
}

मैं थोड़ा खो गया हूं क्योंकि मुझे यकीन नहीं है कि यह क्या कारण है, या क्रेडिटस्टोर भी क्या करता है। IOS में CredStore किस उद्देश्य से कार्य करता है?


मैं आईओएस 11 + एक्सकोड बीटा 6 का उपयोग करके सिम्युलेटर में एक ही लॉग कर रहा हूं। मुझे उम्मीद है कि यह सिर्फ बीटा के कारण है
nacho4d

क्या आपको कभी इसका समाधान नहीं मिला?
स्वल्पनर

@swalkner अभी तक नहीं, अभी भी अधिक जानने की कोशिश कर रहा है।
एंथनी टेलर

मेरी भी यही समस्या है। कोई खबर?
अलेक्जेंडर पेरेचनव

क्या आप एक वीडियो चला रहे हैं?
डैनियल स्टॉर्म

जवाबों:


34

यह त्रुटि तब होती है जब किसी अज्ञात के लिए URLCredentialसे पुनर्प्राप्त करने का प्रयास किया URLCredentialStorageजाता है URLProtectionSpace। जैसे

let protectionSpace = URLProtectionSpace.init(host: host, 
                                              port: port, 
                                              protocol: "http", 
                                              realm: nil, 
                                              authenticationMethod: nil)

var credential: URLCredential? = URLCredentialStorage.shared.defaultCredential(for: protectionSpace)

पैदा करता है

CredStore - performQuery - Error copying matching creds.  Error=-25300, query={
    class = inet;
    "m_Limit" = "m_LimitAll";
    ptcl = http;
    "r_Attributes" = 1;
    srvr = host;
    sync = syna;
}

इसे सुरक्षा स्थान के लिए एक प्रमाणिकता दें:

let userCredential = URLCredential(user: user, 
                                   password: password, 
                                   persistence: .permanent)

URLCredentialStorage.shared.setDefaultCredential(userCredential, for: protectionSpace)

और अगली बार जब आप क्रेडेंशियल प्राप्त करने का प्रयास करते हैं तो त्रुटि दूर हो जाती है।

मैं थोड़ा खो गया हूं क्योंकि मुझे यकीन नहीं है कि यह क्या कारण है, या क्रेडिटस्टोर भी क्या करता है। IOS में CredStore किस उद्देश्य से कार्य करता है?

IOS पर क्रेडेंशियल स्टोरेज उपयोगकर्ताओं को डिवाइस पर प्रमाणपत्र-आधारित या पासवर्ड-आधारित क्रेडेंशियल्स को अस्थायी रूप से या स्थायी रूप से किचेन में संग्रहीत करने की अनुमति देता है।

मुझे संदेह है कि आपके बैकएंड सर्वर पर आपके पास किसी प्रकार का प्रमाणीकरण है और वह सर्वर आपके ऐप के लिए एक प्रमाणीकरण चुनौती का अनुरोध कर रहा है (जिसके लिए कोई क्रेडेंशियल मौजूद नहीं है)।

संभवत: इसे URLCredentialStorageवैध प्रतिक्रिया के रूप में वापस लौटने के रूप में सुरक्षित रूप से अनदेखा किया जा सकता है


2
आप एक सुरक्षा स्थान कैसे बनाएंगे?
टॉम फॉक्स

@ आप सुरक्षा के लिए जानकारी प्रदान कर सकते हैं?
पावलोस

2
मोया और अल्मोफायर में उपयोग कैसे करें?
सोनी

1
मैं भी इस मुद्दे को जब alamofire stackoverflow.com/questions/50342214/… का उपयोग कर रहा हूँ , मुझे नहीं पता कि Alamofire में उपयोगकर्ता कहाँ डाला जाए :(
Alexa289

1
@ ब्रेट, मुझे इस मुद्दे का सामना करना पड़ रहा है जब एएफनेट राइटिंग के माध्यम से ट्विलियो एपीआई को कॉल किया गया। किसी भी सुझाव, AFNetworking के साथ इस मुद्दे को हथियाने के लिए क्या खोजना है?
सुनीता

8

मुझे यकीन नहीं है कि अल्मोफायर के साथ अनुरोध करने पर हमें यह त्रुटि क्यों मिलती है, लेकिन अगर आप HTTP हेडर में कुछ टोकन के साथ एपीआई अनुरोध करते हैं, तो आपको शायद क्रेडेंशियल्स स्टोर की आवश्यकता नहीं है। इसलिए हम इसे अपने अनुरोध के लिए अक्षम कर सकते हैं:

let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = ourHeaders
// disable default credential store
configuration.urlCredentialStorage = nil

let manager = Alamofire.SessionManager(configuration: configuration)
...

इस तरह के बदलाव के बाद कोई त्रुटि नहीं।


4

यह ट्रांसपोर्ट एरर है, प्लिस्ट फाइल में ट्रांसपोर्ट की अनुमति इस तरह जोड़ें:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

सावधान रहें क्योंकि यह आपके ऐप से किसी भी सर्वर से कनेक्शन सक्षम करता है। आगे बढ़ने से पहले ऐप ट्रांसपोर्ट सिक्योरिटी पर और पढ़ें। @Kezi द्वारा टिप्पणी देखें


मुझे नहीं पता कि यह नीचे क्यों जाता है, इस समाधान से मुझे मदद मिली! मुझे FRADioPlayer github.com/fethica/FRadioPlayer
caffeinum

8
@Kffeinum क्योंकि यह किसी भी सुरक्षा को हटा देता है इसलिए कभी भी। यह सॉफ़्टवेयर की ओर से कोई त्रुटि नहीं है। यह आपके ऐप में सुरक्षा के अवरोध को देने के लिए जोड़ा गया है। इस उत्तर में इस बारे में कुछ नहीं कहा गया है कि मनमाने भार का क्या मतलब है।
कीजी

Apple की ऐप समीक्षा संभवत: इसे चिह्नित करेगी और आपसे पूछा जाएगा कि आपके ऐप को मनमाने होस्ट से कनेक्ट करने की आवश्यकता क्यों है। यदि वे आपके उत्तर को पसंद नहीं करते हैं तो वे ऐप को अस्वीकार कर सकते हैं। जिस विशिष्ट होस्टनाम से आप कनेक्ट करने का प्रयास कर रहे हैं, उसके लिए कुंजी जोड़ना ज्यादा बेहतर है।
जेन्स अल्फके

4

मेरे साथ भी यही समस्या है और मैंने पाया कि यदि आपके एपीआई URL में URL के अंत में "/" नहीं है, तो iOS सर्वर पर "प्राधिकरण" मूल्य नहीं भेजता है। जिसके कारण आपको कंसोल में एक संदेश जैसा प्रश्न दिखाई देगा।

तो बस URL के अंत में "/" जोड़ें

https://example.com/api/devices/

2

मैंने स्ट्रिंग को संपादित किया जिसमें इस समस्या को ठीक करने के लिए URL है:

var myUrl = "http://myurl.com"
myUrl = myUrl.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)!

let url = URL(string: myUrl)

2

यदि आपको यह त्रुटि मिलती है, तो AVPlayer का उपयोग करते समय, मुख्य थ्रेड पर केवल .play () कॉल करें


AVPlayer के साथ - मैं प्ले नहीं बल्कि एसेट लोड कर रहा हूं और फिर पॉज़ कहता हूं, लेकिन फिर भी यह चेतावनी मिली।
जॉनी

2

मेरे द्वारा यह त्रुटि प्राप्त करने का कारण गलती से "बेयरर" और मेरे प्राधिकरण हेडर में एक्सेस टोकन के बीच दो स्थानों का उपयोग करना था।

गलत:

request.setValue("Bearer  \(accessToken)", forHTTPHeaderField: "Authorization")

सही बात:

request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")

सरल गलती, लेकिन इसे खोजने में थोड़ा समय लगा।


2

मेरे मामले में, मैं एपीआई कुंजी के साथ स्ट्राइप एसडीके को इनिशियलाइज़ नहीं कर रहा था।

        STPPaymentConfiguration.shared().publishableKey = publishableKey

किसी भी स्ट्राइप ऑपरेशन के मामले में, हम एरर लॉग को प्रिंट कर सकते हैं, इसे समझने में आसान है।

        print(error.debugDescription)

1

ठीक है, मेरे पास यह त्रुटि थी, और लंबे समय (वर्षों) तक मेरे रूबी ऐप पर रूबी के साथ बातचीत करते समय इसके साथ लड़े।

मेरे पास स्वीकृत जवाब में वर्णित के रूप में डिफ़ॉल्ट क्रेडेंशियल थे, लेकिन फिर भी त्रुटि मिली, और क्रेडेंशियल्स की आपूर्ति करने के लिए एक didRceiveChallenge प्रतिक्रिया पर भरोसा कर रहा है - सौभाग्य से जो चारों ओर काम के रूप में काम करता है।

परंतु! मैंने अभी हल ढूंढा है!

मैं एक ऐसे कूबड़ पर काम कर रहा था, जो संरक्षित क्षेत्र के रूबी सर्वर पर रूबी से प्राधिकरण की चुनौती से मेल नहीं खाता था - और मैंने इस क्षेत्र में देखा, जो केवल ऐसा प्रतीत हो रहा था जो अपरिभाषित रह गया था।

मैंने सर्वर रिस्पांस हेडर को प्रिंट करके शुरू किया था, और यद्यपि मैं इनकी जांच करने में सक्षम था, लेकिन उन्होंने डब्ल्यूडब्ल्यूडब्ल्यू-प्राधिकरण क्षेत्र को शामिल नहीं किया था जिसमें वास्तविक क्षेत्र शामिल होगा।

मैंने सोचा कि यह शायद इसलिए था क्योंकि मेरा रेल एप्लिकेशन दायरे को निर्दिष्ट नहीं कर रहा था, इसलिए मैंने रेल की चीजों को देखना शुरू कर दिया।

मैंने पाया कि मैं कॉल के दायरे को निर्दिष्ट कर सकता हूं,

authenticate_or_request_with_http_basic

... जो मैं HTTP बेसिक प्रमाणीकरण के लिए उपयोग कर रहा हूं।

मैं पहले से ही एक क्षेत्र निर्दिष्ट नहीं कर रहा था, इसलिए एक जोड़ा,

authenticate_or_request_with_http_basic("My Rails App")

मैंने इसके बाद प्रोटेक्शनस्पेस में संबंधित स्ट्रिंग जोड़ा,

NSURLProtectionSpace *protectionSpace =
    [[NSURLProtectionSpace alloc] initWithHost:@"myrailsapp.com"
        port:443
        protocol:NSURLProtectionSpaceHTTPS
        realm:@"My Rails App"
        authenticationMethod:NSURLAuthenticationMethodHTTPBasic];

देखा! यह काम किया है, और मैं अब नहीं मिलता है,

CredStore - performQuery - Error copying matching creds.  Error=-25300

रेल एप्लिकेशन में दायरे को निर्दिष्ट करने के बाद भी, मैं अभी भी इसे HTTP हेडर में पारित नहीं देखता, मुझे नहीं पता कि क्यों, लेकिन कम से कम यह काम करता है।


1
आपका जवाब पाकर बहुत खुशी हुई, यह वास्तव में मुझे गुस्सा दिला रहा था।
ggrana

0

त्रुटि सामग्री सुरक्षा नीति (CSP) के कारण भी हो सकती है जो बहुत अधिक प्रतिबंधात्मक हो सकती है। हमारे मामले में, हमें एक सीएसपी की जरूरत थी जो कमोबेश पूरी तरह से खुला हो और हर चीज की अनुमति देता हो। ध्यान रखें कि CSP खोलना एक महान सुरक्षा मुद्दा हो सकता है (इस पर निर्भर करता है कि आप ऐप में क्या कर रहे हैं)।


0

मुझे यह मुद्दा तब मिला जब मैंने वेब-व्यू के अंदर http-पेज खोलने की कोशिश की। लेकिन इस पेज में एक पॉपअप था जो पहले खोला गया था।

जब बैकएंड टीम ने इस पॉपअप को हटा दिया तो सब कुछ ठीक हो गया।


-1
    let credentialData = "\(user):\(password)".data(using: String.Encoding.utf8)!
    let base64Credentials = credentialData.base64EncodedString(options: [])
    let headers = ["Authorization": "Basic \(base64Credentials)"]
    Alamofire.request(url, method: .get, parameters: params,encoding: URLEncoding.default,headers: headers)
                .responseJSON{
            response in
            guard let value =  response.result.value else {return}
                    print(value)
     }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.