| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- /*!
- * Copyright (c) 2015-2016, Okta, Inc. and/or its affiliates. All rights reserved.
- * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
- *
- * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *
- * See the License for the specific language governing permissions and limitations under the License.
- */
-
- var util = require('./util');
-
- function verifyToken(idToken, key) {
- key = util.clone(key);
-
- var format = 'jwk';
- var algo = {
- name: 'RSASSA-PKCS1-v1_5',
- hash: { name: 'SHA-256' }
- };
- var extractable = true;
- var usages = ['verify'];
-
- // https://connect.microsoft.com/IE/feedback/details/2242108/webcryptoapi-importing-jwk-with-use-field-fails
- // This is a metadata tag that specifies the intent of how the key should be used.
- // It's not necessary to properly verify the jwt's signature.
- delete key.use;
-
- return crypto.subtle.importKey(
- format,
- key,
- algo,
- extractable,
- usages
- )
- .then(function(cryptoKey) {
- var jwt = idToken.split('.');
- var payload = util.stringToBuffer(jwt[0] + '.' + jwt[1]);
- var b64Signature = util.base64UrlDecode(jwt[2]);
- var signature = util.stringToBuffer(b64Signature);
-
- return crypto.subtle.verify(
- algo,
- cryptoKey,
- signature,
- payload
- );
- });
- }
-
- module.exports = {
- verifyToken: verifyToken
- };
|